1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/*******************************************************************************
* Copyright (c) 2011 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ats.core.validator;
import java.util.Date;
import org.eclipse.osee.ats.api.IAtsServices;
import org.eclipse.osee.ats.api.IAtsWorkItem;
import org.eclipse.osee.ats.api.util.IValueProvider;
import org.eclipse.osee.ats.api.workdef.IAtsStateDefinition;
import org.eclipse.osee.ats.api.workdef.IAtsWidgetDefinition;
import org.eclipse.osee.ats.api.workdef.WidgetOption;
import org.eclipse.osee.ats.api.workdef.WidgetResult;
import org.eclipse.osee.ats.api.workdef.WidgetStatus;
import org.eclipse.osee.ats.api.workflow.transition.IAtsXWidgetValidator;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.util.DateUtil;
import org.eclipse.osee.framework.jdk.core.util.Lib;
/**
* @author Donald G. Dunne
*/
public abstract class AtsXWidgetValidator implements IAtsXWidgetValidator {
public boolean isTransitionToComplete(IAtsStateDefinition toStateDef) {
return toStateDef.getStateType().isCompletedState();
}
public boolean isRequiredForTransition(IAtsWidgetDefinition widgetDef) {
return widgetDef.getOptions().contains(WidgetOption.REQUIRED_FOR_TRANSITION);
}
public boolean isRequiredForCompletion(IAtsWidgetDefinition widgetDef) {
return widgetDef.getOptions().contains(WidgetOption.REQUIRED_FOR_COMPLETION);
}
public boolean isEmptyValue(IValueProvider provider) throws OseeCoreException {
return provider.isEmpty();
}
public WidgetResult validateWidgetIsRequired(IValueProvider provider, IAtsWidgetDefinition widgetDef, IAtsStateDefinition fromStateDef, IAtsStateDefinition toStateDef) throws OseeCoreException {
if (isRequiredForTransition(widgetDef) && isEmptyValue(provider)) {
return new WidgetResult(WidgetStatus.Invalid_Incompleted, widgetDef, "[%s] is required for transition",
widgetDef.getName());
} else if (isTransitionToComplete(toStateDef) && isRequiredForCompletion(widgetDef) && isEmptyValue(provider)) {
return new WidgetResult(WidgetStatus.Invalid_Incompleted, widgetDef, "[%s] is required for transition to [%s]",
widgetDef.getName(), toStateDef.getName());
}
return WidgetResult.Valid;
}
@Override
public abstract WidgetResult validateTransition(IAtsWorkItem workItem, IValueProvider valueProvider, IAtsWidgetDefinition widgetDef, IAtsStateDefinition fromStateDef, IAtsStateDefinition toStateDef, IAtsServices services) throws OseeCoreException;
public WidgetResult isValidDate(IValueProvider valueProvider, IAtsWidgetDefinition widgetDef) throws OseeCoreException {
for (Date date : valueProvider.getDateValues()) {
if (widgetDef.is(WidgetOption.FUTURE_DATE_REQUIRED)) {
if (date.before(new Date())) {
return new WidgetResult(WidgetStatus.Invalid_Range, widgetDef, "[%s] value [%s] must be in future",
valueProvider.getName(), DateUtil.get(date, DateUtil.MMDDYYHHMM));
}
}
}
return WidgetResult.Valid;
}
public WidgetResult isValid(IValueProvider valueProvider, IAtsWidgetDefinition widgetDef) {
for (String attrStr : valueProvider.getValues()) {
if (attrStr.matches("[-+]?\\d*\\.?\\d*")) {
WidgetResult result = checkValid(widgetDef, Double.parseDouble(attrStr), valueProvider.getName());
if(!result.isValid()) {
return result;
}
} else {
return new WidgetResult(WidgetStatus.Invalid_Type, widgetDef, "[%s] value [%s] is not a valid number",
valueProvider.getName(), attrStr);
}
}
return WidgetResult.Valid;
}
private WidgetResult checkValid(IAtsWidgetDefinition widgetDef, double value, String valueProviderName) {
Double minValue = widgetDef.getMin();
Double maxValue = widgetDef.getMax();
if (minValue != null && Lib.lessThan(value, minValue)) {
return new WidgetResult(WidgetStatus.Invalid_Range, widgetDef, "[%s] value [%s] must be >= [%s]",
valueProviderName, value, minValue);
} else if (maxValue != null && Lib.greaterThan(value, maxValue)) {
return new WidgetResult(WidgetStatus.Invalid_Range, widgetDef, "[%s] value [%s] must be <= [%s]",
valueProviderName, value, minValue, maxValue);
}
return WidgetResult.Valid;
}
public WidgetResult isValidList(IValueProvider valueProvider, IAtsWidgetDefinition widgetDef) throws OseeCoreException {
return checkValid(widgetDef, valueProvider.getValues().size(), valueProvider.getName());
}
}
|