blob: d38fbba1e16af9ed3d4305e7ea1b3d7d4e2a2f84 [file] [log] [blame]
/*******************************************************************************
* 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.builder;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.osee.framework.core.data.AttributeTypeBoolean;
import org.eclipse.osee.framework.core.data.AttributeTypeString;
import org.eclipse.osee.framework.core.data.AttributeTypeToken;
import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException;
import org.eclipse.osee.framework.jdk.core.util.Collections;
import org.eclipse.osee.framework.jdk.core.util.Conditions;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.ui.skynet.widgets.XOption;
import org.eclipse.osee.framework.ui.skynet.widgets.util.SwtXWidgetRenderer;
import org.eclipse.osee.framework.ui.skynet.widgets.util.XWidgetRendererItem;
/**
* @author Donald G. Dunne
*/
public class XWidgetBuilder {
boolean ended = false;
private final List<XWidgetRendererItem> datas = new LinkedList<XWidgetRendererItem>();
private XWidgetRendererItem currItem;
public XWidgetBuilder andRequired() {
Conditions.assertNotNull(currItem, "currItem");
currItem.getXOptionHandler().add(XOption.REQUIRED);
return this;
}
public XWidgetBuilder endWidget() {
currItem = null;
return this;
}
public void newXWidget() {
currItem = new XWidgetRendererItem(new SwtXWidgetRenderer());
datas.add(currItem);
}
public XWidgetBuilder andWidget(String displayName, String widgetType) {
newXWidget();
currItem.setName(displayName);
currItem.setXWidgetName(widgetType);
return this;
}
public XWidgetBuilder andWidget(String widgetType) {
newXWidget();
currItem.setXWidgetName(widgetType);
return this;
}
public List<XWidgetRendererItem> getItems() {
if (currItem != null) {
throw new OseeArgumentException("Can't get items without calling endWidget() on widget [%s]",
currItem.getName());
}
return datas;
}
public XWidgetBuilder andHeight(int height) {
Conditions.assertNotNull(currItem, "currItem");
currItem.setFillVertically(true);
currItem.setHeight(height);
return this;
}
public XWidgetBuilder andFillVertically() {
Conditions.assertNotNull(currItem, "currItem");
currItem.setFillVertically(true);
return this;
}
public XWidgetBuilder andToolTip(AttributeTypeString attrType) {
Conditions.assertNotNull(currItem, "currItem");
currItem.setToolTip(attrType.getDescription());
return this;
}
public XWidgetBuilder andToolTip(String toolTip) {
Conditions.assertNotNull(currItem, "currItem");
currItem.setToolTip(toolTip);
return this;
}
public XWidgetBuilder andXCombo(AttributeTypeToken attrType) {
return andXCombo(attrType.getUnqualifiedName(), attrType);
}
public XWidgetBuilder andXCombo(AttributeTypeToken attrType, List<String> options) {
newXWidget();
setAttrTypeSettings(attrType);
currItem.setName(attrType.getUnqualifiedName());
String optionsStr = Collections.toString(",", options);
currItem.setXWidgetName(String.format("XCombo(%s)", optionsStr));
return this;
}
public XWidgetBuilder andXCombo(String displayName, AttributeTypeToken attrType) {
newXWidget();
setAttrTypeSettings(attrType);
currItem.setName(displayName);
String optionsStr = Collections.toString(",", attrType.toEnum().getEnumStrValues());
currItem.setXWidgetName(String.format("XCombo(%s)", optionsStr));
return this;
}
private void setAttrTypeSettings(AttributeTypeToken attrType) {
currItem.setName(attrType.getUnqualifiedName());
currItem.setStoreName(attrType.getName());
if (Strings.isValid(attrType.getDescription())) {
currItem.setToolTip(attrType.getDescription());
}
}
public XWidgetBuilder andXCombo(String displayName, List<String> options) {
newXWidget();
currItem.setName(displayName);
String optionsStr = Collections.toString(",", options);
currItem.setXWidgetName(String.format("XCombo(%s)", optionsStr));
return this;
}
public XWidgetBuilder andXText(AttributeTypeToken attrType) {
newXWidget();
setAttrTypeSettings(attrType);
currItem.setXWidgetName("XText");
return this;
}
public XWidgetBuilder andXDate(AttributeTypeToken attrType) {
newXWidget();
setAttrTypeSettings(attrType);
currItem.setXWidgetName("XDate");
return this;
}
public XWidgetBuilder andXText(String displayName) {
newXWidget();
currItem.setName(displayName);
currItem.setXWidgetName("XText");
return this;
}
public XWidgetBuilder andComposite(int columns) {
Conditions.assertNotNull(currItem, "currItem");
currItem.setBeginComposite(columns);
return this;
}
public XWidgetBuilder andHorizLabel() {
Conditions.assertNotNull(currItem, "currItem");
currItem.setHorizontalLabel(true);
currItem.setFillVertically(false);
return this;
}
public XWidgetBuilder endComposite() {
Conditions.assertNotNull(currItem, "currItem");
currItem.setEndComposite(true);
return this;
}
public XWidgetBuilder andDefault(Object value) {
Conditions.assertNotNull(currItem, "currItem");
currItem.setDefaultValueObj(value);
return this;
}
public XWidgetBuilder andCheckbox(AttributeTypeToken attrType) {
newXWidget();
setAttrTypeSettings(attrType);
currItem.setXWidgetName("XCheckBox");
return this;
}
public XWidgetBuilder andXCheckBoxThreeState(AttributeTypeBoolean attrType) {
newXWidget();
setAttrTypeSettings(attrType);
currItem.setXWidgetName("XCheckBoxThreeState");
return this;
}
public XWidgetBuilder andLabelAfter() {
Conditions.assertNotNull(currItem, "currItem");
currItem.getXOptionHandler().add(XOption.LABEL_AFTER);
return this;
}
public XWidgetBuilder andXActionableItem() {
newXWidget();
currItem.setXWidgetName("XActionableItemWidget");
return this;
}
}