gpt4 book ai didi

eclipse-emf - 是否可以在使用 Eclipse EMF 验证框架设置值之前对其进行验证?

转载 作者:行者123 更新时间:2023-12-02 00:19:24 28 4
gpt4 key购买 nike

我理解 eclipse 验证框架工作原理的方式:

  • 用工厂生成一个对象
  • 为此对象中的属性设置一个值
  • 检查验证

例如:

public class ValidateNameTest {
public static void main(String[] args) {

ExtlibraryPackageImpl.init();
ExtlibraryFactory factory = ExtlibraryFactory.eINSTANCE;
Writer writer = factory.createWriter();
// comment next line for false result in console
writer.setName("test");
writer.setFirstName("test");
writer.setLastName("test");

boolean isNull = (writer.getName() == null) ? true : false;
System.out.println("writer name is null : " + isNull);

boolean result = validateObject(writer);
System.err.println("result = " + result);

boolean result2 = validateObject2(writer);
System.err.println("result2 = " + result2);

boolean result3 = validateObject3(writer);
System.err.println("result3 = " + result3);

boolean result4 = validateObject5(writer);
System.out.println("result4 = " + result4);
}

public static boolean validateObject(Writer writer) {
ExtlibraryValidator validator = ExtlibraryValidator.INSTANCE;
if (!validator.validateWriter_hasValidName(writer, null, null)) {
return false;
}
return true;
}

public static boolean validateObject2(EObject eObject) {
EValidator validator = EValidator.Registry.INSTANCE
.getEValidator(eObject.eClass().getEPackage());
if (validator != null) {
if (!validator.validate(eObject, null, null)) {
return false;
}
}
return true;
}

public static boolean validateObject3(EObject eObject) {
Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);
return diagnostic.getSeverity() == Diagnostic.OK;
}

public static boolean validateObject5(EObject eObject)
{
Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);

if (diagnostic.getSeverity() == Diagnostic.ERROR || diagnostic.getSeverity() == Diagnostic.WARNING)
{
System.err.println(diagnostic.getMessage());
for (Diagnostic childDiagnostic : diagnostic.getChildren())
{
switch (childDiagnostic.getSeverity())
{
case Diagnostic.ERROR:
case Diagnostic.WARNING:
System.err.println("\t" + childDiagnostic.getMessage());
}
}
return false;
}
return true;
}
}

但我想检查一个值是否对模型有效之前我调用属性的 setter 。使用 Eclipse EMF 验证框架是否可行?有人可以举个例子吗?

最佳答案

我知道一个常见的用例,其中这是可能的:模型和 UI 控件之间的数据绑定(bind)。

当您在模型和用户界面之间建立 EMF 数据绑定(bind)时,您可以按如下方式验证用户输入。创建更新策略(目标到模型)并覆盖方法validateBeforeSet(Object)。这是一个例子:

    EMFDataBindingContext ctx = new EMFDataBindingContext();
ISWTObservableValue notesObservableValue = prop.observe(swtTextViewer);
IEMFValueProperty notesValueProperty = EMFProperties.value(ModelPackage.Literals.THING__NOTES);
UpdateValueStrategy targetToModel = new UpdateValueStrategy() {

@Override
public IStatus validateBeforeSet(Object value) {
if ("".equals(value)) {
MessageDialog.openError(Display.getCurrent()
.getActiveShell(), "Error",
"You should supply a description");
return ValidationStatus
.error("You should supply a description");
}
return super.validateBeforeSet(value);
}

};

ctx.bindValue(notesObservableValue,
notesValueProperty.observe(thing), targetToModel,
new UpdateValueStrategy());

关于eclipse-emf - 是否可以在使用 Eclipse EMF 验证框架设置值之前对其进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com