├── com.xrosstools.xdecision.editor ├── .gitignore ├── icons │ ├── node.ico │ ├── tree.ico │ ├── connection.ico │ ├── connection16.gif │ ├── alignment_left.ico │ ├── alignment_right.ico │ ├── alignment_top.ico │ ├── alignment_bottom.ico │ ├── alignment_center.ico │ ├── alignment_middle.ico │ ├── decrease_node_height.ico │ ├── decrease_node_width.ico │ ├── generate_test_code.ico │ ├── increase_node_height.ico │ ├── increase_node_width.ico │ ├── decrease_horizantal_space.ico │ ├── decrease_vertical_space.ico │ ├── increase_horizantal_space.ico │ └── increase_vertical_space.ico ├── .settings │ ├── org.eclipse.pde.core.prefs │ └── org.eclipse.jdt.core.prefs ├── build.properties ├── src │ └── com │ │ └── xrosstools │ │ └── xdecision │ │ └── editor │ │ ├── model │ │ ├── definition │ │ │ ├── EnumValue.java │ │ │ ├── SetType.java │ │ │ ├── FieldDefinition.java │ │ │ ├── ParameterDefinition.java │ │ │ ├── EnumType.java │ │ │ ├── ArrayType.java │ │ │ ├── PropertyConstants.java │ │ │ └── ListType.java │ │ ├── expression │ │ │ ├── EndExpression.java │ │ │ ├── NegativeExpression.java │ │ │ ├── BracktExpression.java │ │ │ ├── BasicExpression.java │ │ │ ├── OperatorEnum.java │ │ │ ├── Grammar.java │ │ │ ├── Token.java │ │ │ ├── ParameterExpression.java │ │ │ ├── OperatorExpression.java │ │ │ ├── EnclosedExpression.java │ │ │ ├── PlaceholderExpression.java │ │ │ ├── CalculationExpression.java │ │ │ ├── ElementExpression.java │ │ │ ├── ExpressionDefinition.java │ │ │ ├── TokenExpression.java │ │ │ ├── ExtensibleExpression.java │ │ │ ├── MethodExpression.java │ │ │ └── VariableExpression.java │ │ ├── DecisionTreeDecision.java │ │ ├── DecisionTreePathEntry.java │ │ ├── DecisionTreePath.java │ │ └── DecisionTreeFactor.java │ │ ├── commands │ │ ├── InputTextCommand.java │ │ ├── definition │ │ │ ├── CreateNamedTypeCommand.java │ │ │ ├── DeleteMethodCommand.java │ │ │ ├── CreateUserDefineidTypeCommand.java │ │ │ ├── DeleteElementCommand.java │ │ │ └── ChangeElementTypeCommand.java │ │ ├── DeletePathCommand.java │ │ ├── AddFactorCommand2.java │ │ ├── expression │ │ │ └── ChangeOperatorCommand.java │ │ ├── LayoutTreeCommand.java │ │ ├── MoveNodeCommand.java │ │ ├── ReconnectParentCommand.java │ │ ├── CreateNodeCommand.java │ │ ├── CreatePathCommand.java │ │ ├── ReconnectChildCommand.java │ │ └── ChangeDecisionCommand.java │ │ ├── figures │ │ ├── BasicExpressionFigure.java │ │ ├── CompositeExpressionFigure.java │ │ └── ExpandableExpressionFigure.java │ │ ├── treeparts │ │ └── definition │ │ │ ├── EnumTypeTreePart.java │ │ │ ├── NamedTypeTreePart.java │ │ │ ├── MethodDefinitionTreePart.java │ │ │ ├── NamedElementContainerTreePart.java │ │ │ ├── DataTypeTreePart.java │ │ │ └── NamedElementTreePart.java │ │ ├── parts │ │ ├── expression │ │ │ ├── CompositeExpressionPart.java │ │ │ ├── BasicExpressionPart.java │ │ │ └── BaseExpressionPart.java │ │ └── DecisionTreeNodeCellEditorLocator.java │ │ ├── policies │ │ ├── DecisionTreeNodeConnectionEditPolicy.java │ │ └── DecisionTreeNodeEditPolicy.java │ │ ├── actions │ │ ├── CommandAction.java │ │ ├── InputTextCommandAction.java │ │ ├── CommandChain.java │ │ ├── DecisionTreeActionConstants.java │ │ ├── DecisionTreeCreateDecisionAction.java │ │ └── DecisionTreeLayoutAction.java │ │ ├── requests │ │ └── DecisionTreeLayoutRequest.java │ │ └── menus │ │ └── ConnectionContextMenuProvider.java ├── .classpath ├── LICENSE.txt ├── templates │ ├── Junit4TestTemplate.txt │ └── template.xdecision ├── .project └── META-INF │ └── MANIFEST.MF ├── .gitignore ├── doc ├── overview.png ├── run_test.png ├── sample_1.png ├── sample_2.png ├── xdecision_c#.zip ├── expression_model.png ├── generate_unit_test.png ├── create_decison_factor.png ├── expression_properties.png ├── up-2d4e231956aa24c47de8d32be0c8f9891a0.png ├── up-3aa52f77feb022afafbe99e1a2a25d5b897.png ├── up-b8bf88e63ebf86110aa599c1ad2c8ddab72.png └── up-fa974c5611b93a5c9d5d9f433292541fdce.png ├── com.xrosstools.xdecision ├── .gitignore ├── build.properties ├── src │ └── com │ │ └── xrosstools │ │ └── xdecision │ │ ├── PathEvaluator.java │ │ ├── Facts.java │ │ ├── ext │ │ ├── Expression.java │ │ ├── Grammar.java │ │ ├── Token.java │ │ ├── ElementOfExpression.java │ │ ├── SingleOperandParser.java │ │ ├── EndExpression.java │ │ ├── InParser.java │ │ ├── DoubleOperandParser.java │ │ ├── BetweenParser.java │ │ ├── LeftExpression.java │ │ ├── InterExpression.java │ │ ├── EnumType.java │ │ ├── XrossExpressionParser.java │ │ ├── ParametersExpression.java │ │ ├── InternalFact.java │ │ ├── NegtiveExpression.java │ │ ├── SingleOperandExpression.java │ │ ├── ReferenceExpression.java │ │ ├── EnumValue.java │ │ ├── OperandParser.java │ │ ├── OperandExpression.java │ │ ├── AviatorPathEvaluator.java │ │ ├── BetweenExpression.java │ │ ├── TokenParser.java │ │ └── RawValue.java │ │ ├── XDecisionTreeParser.java │ │ ├── DefaultEvaluator.java │ │ ├── DefaultParser.java │ │ ├── MapFacts.java │ │ ├── XDecisionPath.java │ │ └── UserDefinedContext.java ├── META-INF │ └── MANIFEST.MF ├── .settings │ └── org.eclipse.jdt.core.prefs ├── LICENSE.txt ├── .classpath └── .project ├── com.xrosstools.xdecision.idea.editor ├── libs │ └── dom4j-1.6.1.jar ├── resources │ ├── icons │ │ ├── node.png │ │ ├── tree.png │ │ ├── console.png │ │ ├── dialog.png │ │ ├── import.png │ │ ├── connection.ico │ │ ├── connection.png │ │ ├── connection16.gif │ │ ├── alignment_left.png │ │ ├── alignment_right.png │ │ ├── alignment_top.png │ │ ├── alignment_bottom.png │ │ ├── alignment_center.png │ │ ├── alignment_middle.png │ │ ├── create_new_factor.png │ │ ├── create_new_decision.png │ │ ├── decrease_node_height.png │ │ ├── decrease_node_width.png │ │ ├── generate_test_code.png │ │ ├── increase_node_height.png │ │ ├── increase_node_width.png │ │ ├── decrease_horizantal_space.ico │ │ ├── decrease_horizantal_space.png │ │ ├── decrease_vertical_space.ico │ │ ├── decrease_vertical_space.png │ │ ├── increase_horizantal_space.ico │ │ ├── increase_horizantal_space.png │ │ ├── increase_vertical_space.ico │ │ └── increase_vertical_space.png │ └── templates │ │ └── Junit4TestTemplate.txt ├── .idea │ ├── encodings.xml │ ├── vcs.xml │ ├── libraries │ │ └── dom4j_1_6_1.xml │ ├── misc.xml │ └── modules.xml ├── com.xrosstools.xdecision.idea.editor.zip ├── .gitignore ├── src │ └── com │ │ └── xrosstools │ │ └── xdecision │ │ └── idea │ │ └── editor │ │ ├── model │ │ ├── definition │ │ │ ├── EnumValue.java │ │ │ ├── SetType.java │ │ │ ├── FieldDefinition.java │ │ │ ├── ParameterDefinition.java │ │ │ ├── EnumType.java │ │ │ ├── ArrayType.java │ │ │ ├── PropertyConstants.java │ │ │ └── ListType.java │ │ ├── expression │ │ │ ├── EndExpression.java │ │ │ ├── NegativeExpression.java │ │ │ ├── BracktExpression.java │ │ │ ├── BasicExpression.java │ │ │ ├── OperatorEnum.java │ │ │ ├── Grammar.java │ │ │ ├── Token.java │ │ │ ├── ParameterExpression.java │ │ │ ├── EnclosedExpression.java │ │ │ ├── OperatorExpression.java │ │ │ ├── CalculationExpression.java │ │ │ ├── PlaceholderExpression.java │ │ │ ├── ElementExpression.java │ │ │ ├── ExtensibleExpression.java │ │ │ ├── TokenExpression.java │ │ │ └── MethodExpression.java │ │ ├── DecisionTreeDecision.java │ │ ├── DecisionTreeConstants.java │ │ ├── DecisionTreePathEntry.java │ │ ├── DecisionTreePath.java │ │ ├── DecisionTreeFactor.java │ │ ├── DecisionTreeRow.java │ │ └── DecisionTreeRoot.java │ │ ├── figures │ │ ├── ElementColors.java │ │ ├── BasicExpressionFigure.java │ │ ├── CompositeExpressionFigure.java │ │ ├── ExpandableExpressionFigure.java │ │ └── MethodExpressionFigure.java │ │ ├── NewDecisionTreeAction.java │ │ ├── XdecisionFileTypeFactory.java │ │ ├── treeparts │ │ ├── definition │ │ │ ├── NamedTypeTreePart.java │ │ │ ├── EnumTypeTreePart.java │ │ │ ├── MethodDefinitionTreePart.java │ │ │ ├── NamedElementTreePart.java │ │ │ ├── NamedElementContainerTreePart.java │ │ │ └── DataTypeTreePart.java │ │ ├── DecisionTreeNodeTreePart.java │ │ └── DecisionTreeDiagramTreePart.java │ │ ├── policies │ │ ├── DecisionTreeNodeConnectionEditPolicy.java │ │ └── DecisionTreeDiagramLayoutPolicy.java │ │ ├── parts │ │ └── expression │ │ │ ├── CompositeExpressionPart.java │ │ │ ├── BaseExpressionPart.java │ │ │ └── BasicExpressionPart.java │ │ ├── actions │ │ ├── DecisionTreeActionConstants.java │ │ ├── DecisionTreeLayoutAction.java │ │ └── ImportDataTypeAction.java │ │ ├── requests │ │ ├── DecisionTreeLayoutRequest.java │ │ └── DecisionTreeResizeRequest.java │ │ ├── commands │ │ ├── definition │ │ │ ├── CreateNamedTypeCommand.java │ │ │ ├── DeleteMethodCommand.java │ │ │ ├── DeleteElementCommand.java │ │ │ ├── ChangeElementTypeCommand.java │ │ │ └── ChangeElementNameCommand.java │ │ ├── DeletePathCommand.java │ │ ├── AddFactorCommand2.java │ │ ├── expression │ │ │ └── ChangeOperatorCommand.java │ │ ├── LayoutTreeCommand.java │ │ ├── CreateNodeCommand.java │ │ ├── ReconnectParentCommand.java │ │ ├── MoveNodeCommand.java │ │ └── ChangeDecisionCommand.java │ │ └── DecisionTreeEditorProvider.java └── com.xrosstools.xdecision.idea.editor.iml └── com.xrosstools.xdecision.sample ├── .gitignore ├── src └── main │ ├── java │ └── com │ │ └── xrosstools │ │ └── xdecision │ │ ├── sample │ │ ├── PermitEnum.java │ │ ├── LevelEnum.java │ │ └── Health.java │ │ └── AllTests.java │ └── resources │ ├── expression.xdecision │ ├── Sample.xdecision │ ├── DecisionRule.xdecision │ ├── object_validation.xdecision │ └── range_validation.xdecision └── LICENSE.txt /com.xrosstools.xdecision.editor/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Package Files # 4 | *.jar 5 | *.war 6 | *.ear 7 | -------------------------------------------------------------------------------- /doc/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/overview.png -------------------------------------------------------------------------------- /doc/run_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/run_test.png -------------------------------------------------------------------------------- /doc/sample_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/sample_1.png -------------------------------------------------------------------------------- /doc/sample_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/sample_2.png -------------------------------------------------------------------------------- /doc/xdecision_c#.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/xdecision_c#.zip -------------------------------------------------------------------------------- /doc/expression_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/expression_model.png -------------------------------------------------------------------------------- /doc/generate_unit_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/generate_unit_test.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision/.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | 3 | /target 4 | 5 | .classpath 6 | .project 7 | .settings/ 8 | -------------------------------------------------------------------------------- /doc/create_decison_factor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/create_decison_factor.png -------------------------------------------------------------------------------- /doc/expression_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/expression_properties.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision/build.properties: -------------------------------------------------------------------------------- 1 | source.. = src/ 2 | bin.includes = META-INF/,\ 3 | . 4 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/node.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/node.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/tree.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/tree.ico -------------------------------------------------------------------------------- /doc/up-2d4e231956aa24c47de8d32be0c8f9891a0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/up-2d4e231956aa24c47de8d32be0c8f9891a0.png -------------------------------------------------------------------------------- /doc/up-3aa52f77feb022afafbe99e1a2a25d5b897.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/up-3aa52f77feb022afafbe99e1a2a25d5b897.png -------------------------------------------------------------------------------- /doc/up-b8bf88e63ebf86110aa599c1ad2c8ddab72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/up-b8bf88e63ebf86110aa599c1ad2c8ddab72.png -------------------------------------------------------------------------------- /doc/up-fa974c5611b93a5c9d5d9f433292541fdce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/doc/up-fa974c5611b93a5c9d5d9f433292541fdce.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/connection.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/connection.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/connection16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/connection16.gif -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/alignment_left.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/alignment_left.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/alignment_right.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/alignment_right.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/alignment_top.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/alignment_top.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/libs/dom4j-1.6.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/libs/dom4j-1.6.1.jar -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/alignment_bottom.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/alignment_bottom.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/alignment_center.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/alignment_center.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/alignment_middle.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/alignment_middle.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/decrease_node_height.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/decrease_node_height.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/decrease_node_width.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/decrease_node_width.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/generate_test_code.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/generate_test_code.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/increase_node_height.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/increase_node_height.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/increase_node_width.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/increase_node_width.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/node.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/tree.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/console.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/dialog.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/import.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/decrease_horizantal_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/decrease_horizantal_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/decrease_vertical_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/decrease_vertical_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/increase_horizantal_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/increase_horizantal_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/icons/increase_vertical_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.editor/icons/increase_vertical_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/connection.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/connection.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/connection.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | 3 | 4 | /.settings 5 | 6 | .classpath 7 | 8 | .project 9 | 10 | *.prefs 11 | 12 | /.idea/ 13 | /.metadata/ 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/connection16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/connection16.gif -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/alignment_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/alignment_left.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/alignment_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/alignment_right.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/alignment_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/alignment_top.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/alignment_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/alignment_bottom.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/alignment_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/alignment_center.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/alignment_middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/alignment_middle.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/create_new_factor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/create_new_factor.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/java/com/xrosstools/xdecision/sample/PermitEnum.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.sample; 2 | 3 | public enum PermitEnum { 4 | Yes, 5 | No, 6 | } 7 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/.settings/org.eclipse.pde.core.prefs: -------------------------------------------------------------------------------- 1 | #Mon Feb 06 22:10:04 PST 2012 2 | eclipse.preferences.version=1 3 | resolve.requirebundle=false 4 | pluginProject.extensions=false 5 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/com.xrosstools.xdecision.idea.editor.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/com.xrosstools.xdecision.idea.editor.zip -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/create_new_decision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/create_new_decision.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/decrease_node_height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/decrease_node_height.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/decrease_node_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/decrease_node_width.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/generate_test_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/generate_test_code.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/increase_node_height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/increase_node_height.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/increase_node_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/increase_node_width.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/decrease_horizantal_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/decrease_horizantal_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/decrease_horizantal_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/decrease_horizantal_space.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/decrease_vertical_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/decrease_vertical_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/decrease_vertical_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/decrease_vertical_space.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/increase_horizantal_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/increase_horizantal_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/increase_horizantal_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/increase_horizantal_space.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/increase_vertical_space.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/increase_vertical_space.ico -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/icons/increase_vertical_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiehui/xDecision/HEAD/com.xrosstools.xdecision.idea.editor/resources/icons/increase_vertical_space.png -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/java/com/xrosstools/xdecision/sample/LevelEnum.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.sample; 2 | 3 | public enum LevelEnum { 4 | level1, 5 | level2, 6 | level3 7 | } 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/build.properties: -------------------------------------------------------------------------------- 1 | source.. = src/ 2 | output.. = bin/ 3 | bin.includes = META-INF/,\ 4 | .,\ 5 | plugin.xml,\ 6 | icons/,\ 7 | templates/ 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/PathEvaluator.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | public interface PathEvaluator { 4 | Object evaluate(Facts facts, String factorExpression, Object[] paths); 5 | } 6 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/.gitignore: -------------------------------------------------------------------------------- 1 | /out 2 | 3 | /.idea/workspace.xml 4 | 5 | 6 | !/libs/dom4j-1.6.1.jar 7 | 8 | !/libs/com.xrosstools.idea.gef.jar 9 | 10 | 11 | /.idea/sonarlint 12 | 13 | 14 | /.idea/inspectionProfiles -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/Facts.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | 4 | public interface Facts { 5 | String[] getNames(); 6 | boolean contains(String name); 7 | Object get(String name); 8 | } 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/Expression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public interface Expression { 6 | Object evaluate(Facts facts); 7 | } 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Bundle-ManifestVersion: 2 3 | Bundle-Name: xDecision 4 | Bundle-SymbolicName: com.xrosstools.xdecision 5 | Bundle-Version: 1.0.0.qualifier 6 | Export-Package: com.xrosstools.xdecision 7 | Bundle-Vendor: he, jiehui 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/XDecisionTreeParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | public interface XDecisionTreeParser { 4 | Object parseDecisionPath(String nodeExpression, String operator, String pathExpression); 5 | T parseDecision(String name); 6 | } 7 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/.idea/libraries/dom4j_1_6_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 3 | org.eclipse.jdt.core.compiler.compliance=1.7 4 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 5 | org.eclipse.jdt.core.compiler.source=1.7 6 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/EnumValue.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | public class EnumValue extends NamedElement { 4 | public EnumValue(String name) { 5 | super(name, NamedElementTypeEnum.ENUM_VALUE); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/EndExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class EndExpression extends ExpressionDefinition { 4 | public static ExpressionDefinition end() { 5 | return new EndExpression(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/EnumValue.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | public class EnumValue extends NamedElement { 4 | public EnumValue(String name) { 5 | super(name, NamedElementTypeEnum.ENUM_VALUE); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/EndExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class EndExpression extends ExpressionDefinition { 4 | public static ExpressionDefinition end() { 5 | return new EndExpression(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/DefaultEvaluator.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | public class DefaultEvaluator implements PathEvaluator { 4 | 5 | @Override 6 | public Object evaluate(Facts facts, String factorName, Object[] paths) { 7 | return facts.get(factorName); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/NegativeExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class NegativeExpression extends EnclosedExpression { 4 | @Override 5 | public String toString() { 6 | return "-" + getInnerExpression().toString(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/figures/ElementColors.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.figures; 2 | 3 | import java.awt.*; 4 | 5 | public interface ElementColors { 6 | Color TEXT_NORMAL = Color.gray; 7 | Color TEXT_HIGHLIGHT = Color.lightGray; 8 | Color TEXT_ERROR = Color.magenta; 9 | } 10 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/NegativeExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class NegativeExpression extends EnclosedExpression { 4 | @Override 5 | public String toString() { 6 | return "-" + getInnerExpression().toString(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/BracktExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class BracktExpression extends EnclosedExpression { 4 | @Override 5 | public String toString() { 6 | return "(" + (getInnerExpression() == null ? "" : getInnerExpression().toString()) + ")"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/BasicExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public abstract class BasicExpression extends ExpressionDefinition { 4 | public abstract String getDisplayText(); 5 | 6 | @Override 7 | public String toString() { 8 | return getDisplayText(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/BracktExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class BracktExpression extends EnclosedExpression { 4 | @Override 5 | public String toString() { 6 | return "(" + (getInnerExpression() == null ? "" : getInnerExpression().toString()) + ")"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/BasicExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public abstract class BasicExpression extends ExpressionDefinition { 4 | public abstract String getDisplayText(); 5 | 6 | @Override 7 | public String toString() { 8 | return getDisplayText(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/Grammar.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | public class Grammar { 7 | List tokens; 8 | 9 | private Grammar(Object...values) { 10 | tokens = Arrays.asList(values); 11 | } 12 | 13 | public static Grammar of(Object...values) { 14 | return new Grammar(values); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | #Mon Feb 06 22:10:03 PST 2012 2 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 4 | eclipse.preferences.version=1 5 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 6 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 7 | org.eclipse.jdt.core.compiler.source=1.6 8 | org.eclipse.jdt.core.compiler.compliance=1.6 9 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/SetType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 4 | 5 | public class SetType extends CollectionType { 6 | //TODO shall we support toArray[]? If you need it, just contact me 7 | public SetType(DecisionTreeDiagram diagram) { 8 | super(diagram, DataTypeEnum.SET); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/DecisionTreeDecision.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model; 2 | 3 | import com.xrosstools.xdecision.editor.model.definition.NamedElement; 4 | import com.xrosstools.xdecision.editor.model.definition.NamedElementTypeEnum; 5 | 6 | public class DecisionTreeDecision extends NamedElement { 7 | public DecisionTreeDecision(String name) { 8 | super(name, NamedElementTypeEnum.DECISION); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/NewDecisionTreeAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor; 2 | 3 | import com.xrosstools.idea.gef.DefaultNewModelFileAction; 4 | 5 | public class NewDecisionTreeAction extends DefaultNewModelFileAction { 6 | public NewDecisionTreeAction() { 7 | super("Xross Decision Tree", XdecisionFileType.EXTENSION, XdecisionsIcons.TREE, "new_xdecision_file", "/templates/template.xdecision"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/SetType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 5 | 6 | public class SetType extends CollectionType { 7 | //TODO shall we support toArray[]? If you need it, just contact me 8 | public SetType(DecisionTreeDiagram diagram) { 9 | super(diagram, DataTypeEnum.SET); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/InputTextCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | public abstract class InputTextCommand extends Command { 6 | private String inputText; 7 | 8 | public String getInputText() { 9 | return inputText; 10 | } 11 | 12 | public void setInputText(String inputText) { 13 | this.inputText = inputText; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/OperatorEnum.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public enum OperatorEnum { 4 | //TODO "%" 5 | 6 | PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/"); 7 | 8 | public String getOperator() { 9 | return operator; 10 | } 11 | 12 | private String operator; 13 | 14 | OperatorEnum(String operator) { 15 | this.operator = operator; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/Grammar.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | public class Grammar { 7 | List tokens; 8 | 9 | private Grammar(Object...values) { 10 | tokens = Arrays.asList(values); 11 | } 12 | 13 | public static Grammar of(Object...values) { 14 | return new Grammar(values); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/Token.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | public class Token { 4 | private TokenType type; 5 | private String valueStr; 6 | 7 | public Token(TokenType type, String valueStr) { 8 | this.type = type; 9 | this.valueStr = valueStr; 10 | } 11 | 12 | public TokenType getType() { 13 | return type; 14 | } 15 | public String getValueStr() { 16 | return valueStr; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreeDecision.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElement; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElementTypeEnum; 5 | 6 | public class DecisionTreeDecision extends NamedElement { 7 | public DecisionTreeDecision(String name) { 8 | super(name, NamedElementTypeEnum.DECISION); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/OperatorEnum.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public enum OperatorEnum { 4 | //TODO "%" 5 | 6 | PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/"); 7 | 8 | public String getOperator() { 9 | return operator; 10 | } 11 | 12 | private String operator; 13 | 14 | OperatorEnum(String operator) { 15 | this.operator = operator; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/Grammar.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | public class Grammar { 7 | List tokens; 8 | 9 | private Grammar(Object...values) { 10 | tokens = Arrays.asList(values); 11 | } 12 | 13 | public static Grammar of(Object...values) { 14 | return new Grammar(values); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/figures/BasicExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.figures; 2 | 3 | import com.xrosstools.idea.gef.figures.Label; 4 | 5 | public class BasicExpressionFigure extends Label { 6 | private static final String INITIAL_TEXT = "..."; 7 | //TODO support customizatiuon of color etc 8 | public BasicExpressionFigure() { 9 | setForegroundColor(ElementColors.TEXT_NORMAL); 10 | setText(INITIAL_TEXT); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/DecisionTreePathEntry.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model; 2 | 3 | public class DecisionTreePathEntry { 4 | private int nodeIndex; 5 | private int valueIndex; 6 | 7 | public DecisionTreePathEntry(int nodeIndex, int valueIndex){ 8 | this.nodeIndex = nodeIndex; 9 | this.valueIndex = valueIndex; 10 | } 11 | 12 | public int getNodeIndex() { 13 | return nodeIndex; 14 | } 15 | public int getValueIndex() { 16 | return valueIndex; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreeConstants.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | public interface DecisionTreeConstants { 4 | String PROP_FACTOR_ID = "Factor"; 5 | String PROP_DECISION_ID = "Decion"; 6 | String PROP_DESCRIPTION = "description"; 7 | String PROP_NAME = "name"; 8 | String PROP_INPUTS = "inputs"; 9 | String PROP_OUTPUTS = "outputs"; 10 | 11 | String PROP_SIZE = "size"; 12 | String PROP_LOCATION = "location"; 13 | String PROP_LAYOUT = "layout"; 14 | } 15 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/figures/BasicExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.figures; 2 | 3 | import org.eclipse.draw2d.ColorConstants; 4 | import org.eclipse.draw2d.Label; 5 | 6 | public class BasicExpressionFigure extends Label { 7 | private static final String INITIAL_TEXT = "..."; 8 | //TODO support customizatiuon of cloor etc 9 | public BasicExpressionFigure() { 10 | setForegroundColor(ColorConstants.black); 11 | setText(INITIAL_TEXT); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/Token.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class Token { 4 | private TokenType type; 5 | private String valueStr; 6 | 7 | public Token(TokenType type, String valueStr) { 8 | this.type = type; 9 | this.valueStr = valueStr; 10 | } 11 | 12 | public TokenType getType() { 13 | return type; 14 | } 15 | public String getValueStr() { 16 | return valueStr; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreePathEntry.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | public class DecisionTreePathEntry { 4 | private int nodeIndex; 5 | private int valueIndex; 6 | 7 | public DecisionTreePathEntry(int nodeIndex, int valueIndex){ 8 | this.nodeIndex = nodeIndex; 9 | this.valueIndex = valueIndex; 10 | } 11 | 12 | public int getNodeIndex() { 13 | return nodeIndex; 14 | } 15 | public int getValueIndex() { 16 | return valueIndex; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/Token.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class Token { 4 | private TokenType type; 5 | private String valueStr; 6 | 7 | public Token(TokenType type, String valueStr) { 8 | this.type = type; 9 | this.valueStr = valueStr; 10 | } 11 | 12 | public TokenType getType() { 13 | return type; 14 | } 15 | public String getValueStr() { 16 | return valueStr; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/XdecisionFileTypeFactory.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor; 2 | 3 | import com.intellij.openapi.fileTypes.FileTypeConsumer; 4 | import com.intellij.openapi.fileTypes.FileTypeFactory; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | public class XdecisionFileTypeFactory extends FileTypeFactory { 8 | @Override 9 | public void createFileTypes(@NotNull FileTypeConsumer fileTypeConsumer) { 10 | fileTypeConsumer.consume(XdecisionFileType.INSTANCE, XdecisionFileType.EXTENSION); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/ElementOfExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public class ElementOfExpression extends LeftExpression { 6 | private Expression index; 7 | 8 | public ElementOfExpression(Expression index) { 9 | this.index = index; 10 | } 11 | 12 | @Override 13 | public Object evaluate(Facts facts) { 14 | Object[] list = (Object[])leftExp.evaluate(facts); 15 | return list[((Number)index.evaluate(facts)).intValue()]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/SingleOperandParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | public class SingleOperandParser extends OperandParser { 4 | public Expression parse(String nodeExpression, String operator, String pathExpression) { 5 | if(pathExpression != null && pathExpression.length() != 0) 6 | throw new IllegalArgumentException(String.format("s% does not require extra parameter s%", operator, pathExpression)); 7 | 8 | return new SingleOperandExpression(parseNodeExpression(nodeExpression), operator); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/FieldDefinition.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 4 | 5 | public class FieldDefinition extends NamedType { 6 | public FieldDefinition(DecisionTreeDiagram diagram, String name) { 7 | this(diagram, name, DEFAULT_TYPE); 8 | } 9 | 10 | public FieldDefinition(DecisionTreeDiagram diagram, String name, DataType type) { 11 | super(diagram, name, NamedElementTypeEnum.FIELD, type); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/EndExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public class EndExpression extends LeftExpression { 6 | @Override 7 | public Object evaluate(Facts facts) { 8 | throw new IllegalStateException("EndExpression should never be evaluated"); 9 | } 10 | 11 | public Expression setLeftExp(Expression leftExp) { 12 | return leftExp; 13 | } 14 | 15 | public static EndExpression end() { 16 | return new EndExpression(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/ParameterDefinition.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 4 | 5 | public class ParameterDefinition extends NamedType { 6 | public ParameterDefinition(DecisionTreeDiagram diagram, String name) { 7 | this(diagram, name, DEFAULT_TYPE); 8 | } 9 | 10 | public ParameterDefinition(DecisionTreeDiagram diagram, String name, DataType type) { 11 | super(diagram, name, NamedElementTypeEnum.PARTAMETER, type); 12 | } 13 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/DecisionTreePath.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model; 2 | 3 | public class DecisionTreePath { 4 | private DecisionTreePathEntry[] pathEntries; 5 | private int decisionIndex; 6 | 7 | public DecisionTreePath(DecisionTreePathEntry[] pathEntries, int decisionIndex){ 8 | this.pathEntries = pathEntries; 9 | this.decisionIndex = decisionIndex; 10 | } 11 | 12 | public DecisionTreePathEntry[] getPathEntries() { 13 | return pathEntries; 14 | } 15 | 16 | public int getDecisionIndex() { 17 | return decisionIndex; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/FieldDefinition.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | 5 | public class FieldDefinition extends NamedType { 6 | public FieldDefinition(DecisionTreeDiagram diagram, String name) { 7 | this(diagram, name, DEFAULT_TYPE); 8 | } 9 | 10 | public FieldDefinition(DecisionTreeDiagram diagram, String name, DataType type) { 11 | super(diagram, name, NamedElementTypeEnum.FIELD, type); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/ParameterExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class ParameterExpression extends EnclosedExpression { 4 | private boolean first = true; 5 | 6 | public boolean isFirst() { 7 | return first; 8 | } 9 | 10 | public void setFirst(boolean first) { 11 | this.first = first; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return first ? getInnerExpression().toString() : ", " + getInnerExpression().toString(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/definition/NamedTypeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.XdecisionsIcons; 4 | 5 | import javax.swing.*; 6 | 7 | public class NamedTypeTreePart extends NamedElementTreePart { 8 | public NamedTypeTreePart(Object model) { 9 | super(model); 10 | } 11 | 12 | public String getText() { 13 | return getModel().toString(); 14 | } 15 | 16 | public Icon getImage() { 17 | return XdecisionsIcons.NODE; 18 | } 19 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreePath.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | public class DecisionTreePath { 4 | private DecisionTreePathEntry[] pathEntries; 5 | private int decisionIndex; 6 | 7 | public DecisionTreePath(DecisionTreePathEntry[] pathEntries, int decisionIndex){ 8 | this.pathEntries = pathEntries; 9 | this.decisionIndex = decisionIndex; 10 | } 11 | 12 | public DecisionTreePathEntry[] getPathEntries() { 13 | return pathEntries; 14 | } 15 | 16 | public int getDecisionIndex() { 17 | return decisionIndex; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/ParameterDefinition.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | 5 | public class ParameterDefinition extends NamedType { 6 | public ParameterDefinition(DecisionTreeDiagram diagram, String name) { 7 | this(diagram, name, DEFAULT_TYPE); 8 | } 9 | 10 | public ParameterDefinition(DecisionTreeDiagram diagram, String name, DataType type) { 11 | super(diagram, name, NamedElementTypeEnum.PARAMETER, type); 12 | } 13 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/InParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.List; 4 | 5 | public class InParser extends OperandParser { 6 | public Expression parse(String nodeExpression, String operator, String pathExpression) { 7 | List params = parseParameterExpressions(pathExpression); 8 | if(params.size() == 0) 9 | throw new IllegalArgumentException("IN/NOT IN requires at least one parameter"); 10 | 11 | return new InExpression(parseNodeExpression(nodeExpression), operator, params.toArray(new Expression[params.size()])); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/ParameterExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class ParameterExpression extends EnclosedExpression { 4 | private boolean first = true; 5 | 6 | public boolean isFirst() { 7 | return first; 8 | } 9 | 10 | public void setFirst(boolean first) { 11 | this.first = first; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return first ? getInnerExpression().toString() : ", " + getInnerExpression().toString(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 Jiehui He 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. -------------------------------------------------------------------------------- /com.xrosstools.xdecision/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 Jiehui He 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/DefaultParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | /** 4 | * Default implementation which just use the string as value 5 | * @author Jerry He 6 | */ 7 | public class DefaultParser implements XDecisionTreeParser { 8 | @Override 9 | public Object parseDecisionPath(String name, String operator, String value) { 10 | //The V1.0 format, the default "==" is not specified 11 | return operator == null ? value : operator + " " + value; 12 | } 13 | 14 | @Override 15 | public Object parseDecision(String name) { 16 | return name; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/DoubleOperandParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.List; 4 | 5 | public class DoubleOperandParser extends OperandParser { 6 | public Expression parse(String nodeExpression, String operator, String pathExpression) { 7 | List params = parseParameterExpressions(pathExpression); 8 | if(params.size() != 1) 9 | throw new IllegalArgumentException("Only one expression is allowed: " + pathExpression); 10 | 11 | return new DoubleOperandExpression(parseNodeExpression(nodeExpression), operator, params.get(0)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 Jiehui He 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/treeparts/definition/EnumTypeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.treeparts.definition; 2 | 3 | import java.util.List; 4 | 5 | import com.xrosstools.xdecision.editor.model.definition.EnumType; 6 | 7 | public class EnumTypeTreePart extends DataTypeTreePart { 8 | public EnumTypeTreePart(Object model) { 9 | super(model); 10 | } 11 | 12 | @Override 13 | protected List getModelChildren() { 14 | List children = super.getModelChildren(); 15 | children.add(0, ((EnumType)getModel()).getValues()); 16 | return children; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/definition/EnumTypeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts.definition; 2 | 3 | import java.util.List; 4 | 5 | import com.xrosstools.xdecision.idea.editor.model.definition.EnumType; 6 | 7 | public class EnumTypeTreePart extends DataTypeTreePart { 8 | public EnumTypeTreePart(Object model) { 9 | super(model); 10 | } 11 | 12 | @Override 13 | public List getModelChildren() { 14 | List children = super.getModelChildren(); 15 | children.add(0, ((EnumType)getModel()).getValues()); 16 | return children; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/policies/DecisionTreeNodeConnectionEditPolicy.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.policies; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.idea.gef.parts.EditPolicy; 5 | import com.xrosstools.xdecision.idea.editor.commands.DeletePathCommand; 6 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNodeConnection; 7 | 8 | public class DecisionTreeNodeConnectionEditPolicy extends EditPolicy { 9 | 10 | public Command getDeleteCommand() { 11 | return new DeletePathCommand((DecisionTreeNodeConnection)getHost().getModel()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/DecisionTreeFactor.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model; 2 | 3 | import com.xrosstools.xdecision.editor.model.definition.NamedElementTypeEnum; 4 | import com.xrosstools.xdecision.editor.model.definition.NamedType; 5 | 6 | public class DecisionTreeFactor extends NamedType { 7 | public DecisionTreeFactor(DecisionTreeDiagram diagram, String name) { 8 | super(diagram, name, NamedElementTypeEnum.FACTOR, DEFAULT_TYPE); 9 | } 10 | 11 | public String getFactorName() { 12 | return getName(); 13 | } 14 | public void setFactorName(String factorName) { 15 | setName(factorName); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/treeparts/definition/NamedTypeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.treeparts.definition; 2 | 3 | import org.eclipse.swt.graphics.Image; 4 | 5 | import com.xrosstools.xdecision.editor.Activator; 6 | 7 | public class NamedTypeTreePart extends NamedElementTreePart { 8 | public NamedTypeTreePart(Object model) { 9 | super(model); 10 | } 11 | 12 | protected String getText() { 13 | return getModel().toString(); 14 | } 15 | 16 | protected Image getImage() { 17 | return Activator.getDefault().getImage(com.xrosstools.xdecision.editor.Activator.NODE); 18 | } 19 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/figures/CompositeExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.figures; 2 | 3 | import org.eclipse.draw2d.Figure; 4 | import org.eclipse.draw2d.ToolbarLayout; 5 | 6 | public class CompositeExpressionFigure extends Figure { 7 | 8 | public CompositeExpressionFigure() { 9 | ToolbarLayout elementsLayout = new ToolbarLayout(); 10 | elementsLayout.setHorizontal(true); 11 | elementsLayout.setSpacing(2); 12 | elementsLayout.setStretchMinorAxis(false); 13 | elementsLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER); 14 | setLayoutManager(elementsLayout); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreeFactor.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElementTypeEnum; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedType; 5 | 6 | public class DecisionTreeFactor extends NamedType { 7 | public DecisionTreeFactor(DecisionTreeDiagram diagram, String name) { 8 | super(diagram, name, NamedElementTypeEnum.FACTOR, DEFAULT_TYPE); 9 | } 10 | 11 | public String getFactorName() { 12 | return getName(); 13 | } 14 | public void setFactorName(String factorName) { 15 | setName(factorName); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/BetweenParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.List; 4 | 5 | public class BetweenParser extends OperandParser { 6 | public Expression parse(String nodeExpression, String operator, String pathExpression) { 7 | List params = parseParameterExpressions(pathExpression); 8 | if(params.size() != 2) 9 | throw new IllegalArgumentException(String.format("BETWEEN/NOT BETWEEN requires exactly 2 parameters. Please check the format of : ", pathExpression)); 10 | 11 | return new BetweenExpression(parseNodeExpression(nodeExpression), operator, params.get(0), params.get(1)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/EnclosedExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class EnclosedExpression extends ExpressionDefinition { 4 | private ExpressionDefinition innerExpression; 5 | 6 | public ExpressionDefinition getInnerExpression() { 7 | return innerExpression; 8 | } 9 | public EnclosedExpression setInnerExpression(ExpressionDefinition innerExpression) { 10 | unlisten(this.innerExpression); 11 | this.innerExpression = innerExpression; 12 | listen(innerExpression); 13 | propertyChanged(); 14 | return this; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/OperatorExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class OperatorExpression extends BasicExpression { 4 | private OperatorEnum operator; 5 | 6 | public OperatorExpression(OperatorEnum operator) { 7 | this.operator = operator; 8 | } 9 | 10 | public void setOperator(OperatorEnum operator) { 11 | this.operator = operator; 12 | } 13 | 14 | public OperatorEnum getOperator() { 15 | return operator; 16 | } 17 | 18 | @Override 19 | public String getDisplayText() { 20 | return operator.getOperator(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/parts/expression/CompositeExpressionPart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.parts.expression; 2 | 3 | import java.util.List; 4 | 5 | import org.eclipse.draw2d.IFigure; 6 | 7 | import com.xrosstools.xdecision.editor.figures.CompositeExpressionFigure; 8 | import com.xrosstools.xdecision.editor.model.expression.CompositeExpression; 9 | 10 | public class CompositeExpressionPart extends BaseExpressionPart { 11 | protected List getModelChildren() { 12 | return ((CompositeExpression)getModel()).getAllExpression(); 13 | } 14 | 15 | protected IFigure createFigure() { 16 | return new CompositeExpressionFigure(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/OperatorExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class OperatorExpression extends BasicExpression { 4 | private OperatorEnum operator; 5 | 6 | public OperatorExpression(OperatorEnum operator) { 7 | this.operator = operator; 8 | } 9 | 10 | public void setOperator(OperatorEnum operator) { 11 | this.operator = operator; 12 | } 13 | 14 | public OperatorEnum getOperator() { 15 | return operator; 16 | } 17 | 18 | @Override 19 | public String getDisplayText() { 20 | return operator.getOperator(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/EnclosedExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class EnclosedExpression extends ExpressionDefinition { 4 | private ExpressionDefinition innerExpression; 5 | 6 | public ExpressionDefinition getInnerExpression() { 7 | return innerExpression; 8 | } 9 | public EnclosedExpression setInnerExpression(ExpressionDefinition innerExpression) { 10 | this.innerExpression = innerExpression; 11 | if(innerExpression != null) 12 | innerExpression.getListeners().addPropertyChangeListener(this); 13 | propertyChanged(); 14 | return this; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/figures/CompositeExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.figures; 2 | 3 | import com.xrosstools.idea.gef.figures.Figure; 4 | import com.xrosstools.idea.gef.figures.ToolbarLayout; 5 | 6 | public class CompositeExpressionFigure extends Figure { 7 | 8 | public CompositeExpressionFigure() { 9 | ToolbarLayout elementsLayout = new ToolbarLayout(); 10 | elementsLayout.setHorizontal(true); 11 | elementsLayout.setSpacing(5); 12 | elementsLayout.setStretchMinorAxis(false); 13 | elementsLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER); 14 | setLayoutManager(elementsLayout); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/policies/DecisionTreeNodeConnectionEditPolicy.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.policies; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | import org.eclipse.gef.editpolicies.ComponentEditPolicy; 5 | import org.eclipse.gef.requests.GroupRequest; 6 | 7 | import com.xrosstools.xdecision.editor.commands.DeletePathCommand; 8 | import com.xrosstools.xdecision.editor.model.DecisionTreeNodeConnection; 9 | 10 | public class DecisionTreeNodeConnectionEditPolicy extends ComponentEditPolicy{ 11 | 12 | protected Command createDeleteCommand(GroupRequest deleteRequest) { 13 | return new DeletePathCommand((DecisionTreeNodeConnection)getHost().getModel()); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreeRow.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class DecisionTreeRow { 7 | private int maxChidrenNumber; 8 | private List rowNodes = new ArrayList(); 9 | 10 | public int getMaxChidrenNumber() { 11 | return maxChidrenNumber; 12 | } 13 | public void setMaxChidrenNumber(int maxChidrenNumber) { 14 | this.maxChidrenNumber = maxChidrenNumber; 15 | } 16 | public List getRowNodes() { 17 | return rowNodes; 18 | } 19 | public void setRowNodes(List rowNodes) { 20 | this.rowNodes = rowNodes; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/parts/expression/CompositeExpressionPart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.parts.expression; 2 | 3 | import java.util.List; 4 | 5 | import com.xrosstools.idea.gef.figures.Figure; 6 | import com.xrosstools.xdecision.idea.editor.figures.CompositeExpressionFigure; 7 | import com.xrosstools.xdecision.idea.editor.model.expression.CompositeExpression; 8 | 9 | public class CompositeExpressionPart extends BaseExpressionPart { 10 | public List getModelChildren() { 11 | return ((CompositeExpression)getModel()).getAllExpression(); 12 | } 13 | 14 | protected Figure createFigure() { 15 | return new CompositeExpressionFigure(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/treeparts/definition/MethodDefinitionTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.treeparts.definition; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.xrosstools.xdecision.editor.model.definition.MethodDefinition; 7 | 8 | public class MethodDefinitionTreePart extends NamedElementTreePart { 9 | private MethodDefinition method; 10 | public MethodDefinitionTreePart(Object model) { 11 | super(model); 12 | method = (MethodDefinition)model; 13 | } 14 | 15 | @Override 16 | protected List getModelChildren() { 17 | List a = new ArrayList(); 18 | a.add(method.getParameters()); 19 | return a; 20 | } 21 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/PlaceholderExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | import com.xrosstools.xdecision.editor.model.definition.ParameterDefinition; 4 | 5 | public class PlaceholderExpression extends BasicExpression { 6 | public static final PlaceholderExpression EMPTY = new PlaceholderExpression(""); 7 | private String text = ""; 8 | 9 | public PlaceholderExpression(String name) { 10 | this.text = name; 11 | } 12 | public PlaceholderExpression(ParameterDefinition definition) { 13 | this(definition.getName()); 14 | } 15 | @Override 16 | public String getDisplayText() { 17 | return text; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/CalculationExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | /** 4 | * A + B - C 5 | */ 6 | public class CalculationExpression extends CompositeExpression { 7 | public static CalculationExpression compile(OperatorEnum operator, ExpressionDefinition operant) { 8 | CalculationExpression calExp; 9 | if(operant instanceof CalculationExpression) { 10 | calExp = ((CalculationExpression)operant); 11 | }else{ 12 | calExp = new CalculationExpression(); 13 | calExp.addFirst(operant); 14 | } 15 | calExp.addFirst(new OperatorExpression(operator)); 16 | return calExp; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/actions/DecisionTreeActionConstants.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.actions; 2 | 3 | public interface DecisionTreeActionConstants { 4 | String ID_PREFIX = "com.xrosstools.xdecision.editor."; 5 | 6 | String ALIGN_LEFT = "alignment_left"; 7 | String ALIGN_CENTER = "alignment_center"; 8 | String ALIGN_RIGHT = "alignment_right"; 9 | 10 | String ALIGN_BOTTOM = "alignment_bottom"; 11 | String ALIGN_MIDDLE = "alignment_middle"; 12 | String ALIGN_TOP = "alignment_top"; 13 | 14 | String GEN_TEST_CODE_DIALOG = "dialog"; 15 | String GEN_TEST_CODE_CONSOLE = "console"; 16 | String CREATE_NEW_DECISION = "create_new_decision"; 17 | String CREATE_NEW_FACTOR = "create_new_factor"; 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/DecisionTreeRoot.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class DecisionTreeRoot { 7 | private DecisionTreeNode rootNode; 8 | private List rows = new ArrayList(); 9 | private int width; 10 | 11 | public DecisionTreeRoot(DecisionTreeNode rootNode){ 12 | this.rootNode = rootNode; 13 | } 14 | 15 | public DecisionTreeNode getRootNode() { 16 | return rootNode; 17 | } 18 | public List getRows() { 19 | return rows; 20 | } 21 | public int getWidth() { 22 | return width; 23 | } 24 | public void setWidth(int width) { 25 | this.width = width; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/EnumType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | public class EnumType extends DataType { 4 | public EnumType() { 5 | super(DataTypeEnum.ENUM); 6 | } 7 | 8 | public EnumType(String name) { 9 | super(DataTypeEnum.ENUM); 10 | setName(name); 11 | } 12 | 13 | private NamedElementContainer values = new NamedElementContainer(ENUM_VALUE_MSG, NamedElementTypeEnum.ENUM_VALUE); 14 | 15 | public NamedElementContainer getValues() { 16 | return values; 17 | } 18 | 19 | public EnumValue findByName(String name) { 20 | return values.findByName(name); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/com.xrosstools.xdecision.idea.editor.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/definition/MethodDefinitionTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts.definition; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.xrosstools.xdecision.idea.editor.model.definition.MethodDefinition; 7 | 8 | public class MethodDefinitionTreePart extends NamedElementTreePart { 9 | private MethodDefinition method; 10 | public MethodDefinitionTreePart(Object model) { 11 | super(model); 12 | method = (MethodDefinition)model; 13 | } 14 | 15 | @Override 16 | public List getModelChildren() { 17 | List a = new ArrayList(); 18 | a.add(method.getParameters()); 19 | return a; 20 | } 21 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/LeftExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | public abstract class LeftExpression implements Expression { 4 | protected Expression leftExp; 5 | 6 | public Expression setLeftExp(Expression leftExp) { 7 | if(leftExp instanceof EndExpression) 8 | return this; 9 | 10 | if(this.leftExp == null) { 11 | this.leftExp = leftExp; 12 | return this; 13 | } 14 | 15 | if(this.leftExp instanceof LeftExpression) { 16 | ((LeftExpression)this.leftExp).setLeftExp(leftExp); 17 | return this; 18 | } 19 | 20 | throw new IllegalArgumentException(leftExp.toString() + " is not allowed"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/CalculationExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | /** 4 | * A + B - C 5 | */ 6 | public class CalculationExpression extends CompositeExpression { 7 | public static CalculationExpression compile(OperatorEnum operator, ExpressionDefinition operand) { 8 | CalculationExpression calExp; 9 | if(operand instanceof CalculationExpression) { 10 | calExp = ((CalculationExpression)operand); 11 | }else{ 12 | calExp = new CalculationExpression(); 13 | calExp.addFirst(operand); 14 | } 15 | calExp.addFirst(new OperatorExpression(operator)); 16 | return calExp; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/PlaceholderExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.definition.ParameterDefinition; 4 | 5 | public class PlaceholderExpression extends BasicExpression { 6 | public static final PlaceholderExpression EMPTY = new PlaceholderExpression(""); 7 | private String text = ""; 8 | 9 | public PlaceholderExpression(String name) { 10 | this.text = name; 11 | } 12 | public PlaceholderExpression(ParameterDefinition definition) { 13 | this(definition.getName()); 14 | } 15 | @Override 16 | public String getDisplayText() { 17 | return text; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/EnumType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | public class EnumType extends DataType { 4 | public EnumType() { 5 | super(DataTypeEnum.ENUM); 6 | } 7 | 8 | public EnumType(String name) { 9 | super(DataTypeEnum.ENUM); 10 | setName(name); 11 | } 12 | 13 | private NamedElementContainer values = new NamedElementContainer(ENUM_VALUE_MSG, NamedElementTypeEnum.ENUM_VALUE); 14 | 15 | public NamedElementContainer getValues() { 16 | return values; 17 | } 18 | 19 | public EnumValue findByName(String name) { 20 | return values.findByName(name); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/InterExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.xrosstools.xdecision.Facts; 7 | 8 | public class InterExpression implements Expression { 9 | private List segment = new ArrayList<>(); 10 | private Grammar g; 11 | public InterExpression(List segment, Grammar g) { 12 | super(); 13 | this.segment = segment; 14 | this.g = g; 15 | } 16 | public List getSegment() { 17 | return segment; 18 | } 19 | public Grammar getG() { 20 | return g; 21 | } 22 | @Override 23 | public Object evaluate(Facts facts) { 24 | return null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/templates/Junit4TestTemplate.txt: -------------------------------------------------------------------------------- 1 | package !PACKAGE!; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.*; 7 | 8 | import com.xrosstools.xdecision.MapFacts; 9 | import com.xrosstools.xdecision.XDecisionTree; 10 | import com.xrosstools.xdecision.XDecisionTreeFactory; 11 | 12 | public class !TEST_CLASS! { 13 | private XDecisionTree tree; 14 | private MapFacts test; 15 | 16 | @Before 17 | public void setUp(){ 18 | try { 19 | // Please revise the path to correct value 20 | tree = XDecisionTreeFactory.create("!MODEL_PATH!"); 21 | } catch (Exception e) { 22 | e.printStackTrace(); 23 | fail(); 24 | } 25 | }!TREE_VERIFY!} 26 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/templates/template.xdecision: -------------------------------------------------------------------------------- 1 | value1value2value1value2value1value20:00:10:0|1:00:0|1:10:1|2:00:1|2:1 -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/EnumType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.HashMap; 4 | import java.util.List; 5 | import java.util.Map; 6 | 7 | public class EnumType { 8 | private String name; 9 | private Map values = new HashMap<>(); 10 | 11 | public EnumType(String name, List enumValues) { 12 | this.name = name; 13 | for(String v: enumValues) 14 | values.put(v, new EnumValue(this, v)); 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public EnumValue valueOf(String name) { 22 | return values.get(name); 23 | } 24 | 25 | public boolean contains(String name) { 26 | return values.containsKey(name); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/resources/templates/Junit4TestTemplate.txt: -------------------------------------------------------------------------------- 1 | package !PACKAGE!; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.*; 7 | 8 | import com.xrosstools.xdecision.MapFacts; 9 | import com.xrosstools.xdecision.XDecisionTree; 10 | import com.xrosstools.xdecision.XDecisionTreeFactory; 11 | 12 | public class !TEST_CLASS! { 13 | private XDecisionTree tree; 14 | private MapFacts test; 15 | 16 | @Before 17 | public void setUp(){ 18 | try { 19 | // Please revise the path to correct value 20 | tree = XDecisionTreeFactory.create("!MODEL_PATH!"); 21 | tree.setDebug(true); 22 | } catch (Exception e) { 23 | e.printStackTrace(); 24 | fail(); 25 | } 26 | }!TREE_VERIFY!} 27 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/XrossExpressionParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.List; 4 | 5 | public class XrossExpressionParser { 6 | private TokenParser tokenParser = new TokenParser(); 7 | private ExpressionCompiler compiler = new ExpressionCompiler(); 8 | 9 | public Expression parseNodeExpression(String expressionStr) { 10 | List tokens = tokenParser.parseToken(expressionStr); 11 | 12 | return compiler.compile(tokens); 13 | } 14 | 15 | public ParametersExpression parseParameterExpressions(String expressionStr) { 16 | List tokens = tokenParser.parseToken(expressionStr); 17 | 18 | return (ParametersExpression)compiler.compile(ExpressionType.P, tokens); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/policies/DecisionTreeNodeEditPolicy.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.policies; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | import org.eclipse.gef.editpolicies.ComponentEditPolicy; 5 | import org.eclipse.gef.requests.GroupRequest; 6 | 7 | import com.xrosstools.xdecision.editor.commands.DeleteNodeCommand; 8 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 9 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 10 | 11 | public class DecisionTreeNodeEditPolicy extends ComponentEditPolicy { 12 | 13 | protected Command createDeleteCommand(GroupRequest deleteRequest) { 14 | return new DeleteNodeCommand( 15 | (DecisionTreeDiagram)(getHost().getParent().getModel()), 16 | (DecisionTreeNode)(getHost().getModel())); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/requests/DecisionTreeLayoutRequest.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.requests; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | 5 | public class DecisionTreeLayoutRequest { 6 | private DecisionTreeDiagram diagram; 7 | private boolean isHorizantal; 8 | private float alignment; 9 | 10 | public DecisionTreeLayoutRequest(DecisionTreeDiagram diagram, boolean isHorizantal, float alignment){ 11 | this.diagram = diagram; 12 | this.alignment = alignment; 13 | this.isHorizantal = isHorizantal; 14 | } 15 | 16 | public boolean isHorizantal() { 17 | return isHorizantal; 18 | } 19 | 20 | public float getAlignment() { 21 | return alignment; 22 | } 23 | 24 | public DecisionTreeDiagram getDiagram() { 25 | return diagram; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/actions/CommandAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.actions; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | import org.eclipse.gef.ui.actions.WorkbenchPartAction; 5 | import org.eclipse.ui.IWorkbenchPart; 6 | 7 | public class CommandAction extends WorkbenchPartAction implements DecisionTreeActionConstants, DecisionTreeMessages{ 8 | private Command command; 9 | public CommandAction(IWorkbenchPart part, String text, boolean checked, Command command){ 10 | super(part); 11 | setText(text); 12 | setChecked(checked); 13 | this.command = command; 14 | } 15 | 16 | protected boolean calculateEnabled() { 17 | return true; 18 | } 19 | 20 | public void run() { 21 | execute(command); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/actions/InputTextCommandAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.actions; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | import org.eclipse.ui.IWorkbenchPart; 5 | 6 | import com.xrosstools.xdecision.editor.commands.InputTextCommand; 7 | 8 | public class InputTextCommandAction extends BaseDialogAction { 9 | private InputTextCommand command; 10 | public InputTextCommandAction(IWorkbenchPart part, String dialogTitle, String dialogMessage, String initialValue, InputTextCommand command) { 11 | super(part, dialogTitle, dialogMessage, initialValue); 12 | this.command = command; 13 | } 14 | 15 | @Override 16 | protected Command createCommand(String value) { 17 | command.setInputText(value); 18 | return command; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/definition/CreateNamedTypeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands.definition; 2 | 3 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 4 | import com.xrosstools.xdecision.editor.model.definition.NamedElementContainer; 5 | import com.xrosstools.xdecision.editor.model.definition.NamedType; 6 | 7 | public class CreateNamedTypeCommand extends CreateElementCommand{ 8 | private String fieldType; 9 | 10 | public CreateNamedTypeCommand(DecisionTreeDiagram diagram, NamedElementContainer container, String fieldType){ 11 | super(diagram, container); 12 | this.fieldType = fieldType; 13 | } 14 | 15 | public void execute() { 16 | super.execute(); 17 | ((NamedType)newElement).setType(diagram.findDataType(fieldType)); 18 | } 19 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/ArrayType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 4 | 5 | public class ArrayType extends TemplateType { 6 | private static final String LENGTH = "length"; 7 | 8 | private FieldDefinition length; 9 | 10 | public ArrayType(DecisionTreeDiagram diagram) { 11 | super(diagram, DataTypeEnum.ARRAY); 12 | length = new FieldDefinition(diagram, LENGTH, DataType.NUMBER_TYPE); 13 | add(length); 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return getValueType().toString() + "[]"; 19 | } 20 | 21 | public void setValueType(DataType valueType) { 22 | length.setType(valueType); 23 | super.setValueType(valueType); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/definition/CreateNamedTypeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElementContainer; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedType; 6 | 7 | public class CreateNamedTypeCommand extends CreateElementCommand{ 8 | private String fieldType; 9 | 10 | public CreateNamedTypeCommand(DecisionTreeDiagram diagram, NamedElementContainer container, String fieldType){ 11 | super(diagram, container); 12 | this.fieldType = fieldType; 13 | } 14 | 15 | public void execute() { 16 | super.execute(); 17 | ((NamedType)newElement).setType(diagram.findDataType(fieldType)); 18 | } 19 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/DeletePathCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeNodeConnection; 6 | 7 | public class DeletePathCommand extends Command { 8 | private DecisionTreeNodeConnection path; 9 | public DeletePathCommand(DecisionTreeNodeConnection path){ 10 | this.path = path; 11 | } 12 | 13 | public void execute() { 14 | path.getParent().removeOutput(path); 15 | path.getChild().setInput(null); 16 | } 17 | 18 | public String getLabel() { 19 | return "Delete path"; 20 | } 21 | 22 | public void redo() { 23 | execute(); 24 | } 25 | 26 | public void undo() { 27 | path.getParent().addOutput(path); 28 | path.getChild().setInput(path); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/ArrayType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | 5 | public class ArrayType extends TemplateType { 6 | private static final String LENGTH = "length"; 7 | 8 | private FieldDefinition length; 9 | 10 | public ArrayType(DecisionTreeDiagram diagram) { 11 | super(diagram, DataTypeEnum.ARRAY); 12 | length = new FieldDefinition(diagram, LENGTH, DataType.NUMBER_TYPE); 13 | add(length); 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return getValueType().toString() + "[]"; 19 | } 20 | 21 | public void setValueType(DataType valueType) { 22 | length.setType(valueType); 23 | super.setValueType(valueType); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/DeletePathCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNodeConnection; 5 | 6 | public class DeletePathCommand extends Command { 7 | private DecisionTreeNodeConnection path; 8 | public DeletePathCommand(DecisionTreeNodeConnection path){ 9 | this.path = path; 10 | } 11 | 12 | public void execute() { 13 | path.getParent().removeOutput(path); 14 | path.getChild().setInput(null); 15 | } 16 | 17 | public String getLabel() { 18 | return "Delete path"; 19 | } 20 | 21 | public void redo() { 22 | execute(); 23 | } 24 | 25 | public void undo() { 26 | path.getParent().addOutput(path); 27 | path.getChild().setInput(path); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/definition/NamedElementTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts.definition; 2 | 3 | import com.xrosstools.idea.gef.parts.AbstractTreeEditPart; 4 | import com.xrosstools.xdecision.idea.editor.XdecisionsIcons; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElement; 6 | 7 | import javax.swing.*; 8 | import java.beans.PropertyChangeListener; 9 | 10 | public class NamedElementTreePart extends AbstractTreeEditPart implements PropertyChangeListener { 11 | private NamedElement element; 12 | public NamedElementTreePart(Object model) { 13 | super(model); 14 | this.element = (NamedElement)model; 15 | } 16 | 17 | public String getText() { 18 | return element.toString(); 19 | } 20 | 21 | public Icon getImage() { 22 | return XdecisionsIcons.TREE; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/java/com/xrosstools/xdecision/sample/Health.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.sample; 2 | 3 | import java.util.Date; 4 | 5 | public class Health { 6 | 7 | /** 8 | * Customer name; 9 | */ 10 | private final String name; 11 | private final String status; 12 | 13 | /** 14 | * VIP status. 15 | */ 16 | private final boolean vip; 17 | private final Date date = new Date(); 18 | 19 | private LevelEnum level; 20 | private Health child; 21 | 22 | 23 | /** 24 | * Creates a customer with the given name and status. 25 | */ 26 | public Health (String name, boolean vip, String status) { 27 | this.name = name; 28 | this.status = status; 29 | this.vip = vip; 30 | } 31 | 32 | public void setChild(Health child) { 33 | this.child = child; 34 | } 35 | 36 | public void setLevel(LevelEnum level) { 37 | this.level = level; 38 | } 39 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.xrosstools.xdecision.editor 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.pde.ManifestBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.pde.SchemaBuilder 20 | 21 | 22 | 23 | 24 | org.sonarlint.eclipse.core.sonarlintBuilder 25 | 26 | 27 | 28 | 29 | 30 | org.eclipse.pde.PluginNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/ParametersExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.LinkedList; 4 | import java.util.List; 5 | 6 | import com.xrosstools.xdecision.Facts; 7 | 8 | public class ParametersExpression extends LeftExpression { 9 | private LinkedList params = new LinkedList<>(); 10 | 11 | public ParametersExpression() { 12 | super(); 13 | } 14 | 15 | public void addParameter(Expression leftParametere) { 16 | params.addFirst(leftParametere); 17 | } 18 | 19 | public List getParams() { 20 | return params; 21 | } 22 | 23 | @Override 24 | public Object evaluate(Facts facts) { 25 | Object[] values = new Object[params.size()]; 26 | 27 | for(int i = 0; i < values.length; i++) 28 | values[i] = params.get(i).evaluate(facts); 29 | return values; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Bundle-ManifestVersion: 2 3 | Bundle-Name: xDecision editor 4 | Bundle-SymbolicName: com.xrosstools.xdecision.editor;singleton:=true 5 | Bundle-Version: 3.0.5.qualifier 6 | Bundle-Activator: com.xrosstools.xdecision.editor.Activator 7 | Bundle-Vendor: he, jiehui 8 | Bundle-RequiredExecutionEnvironment: JavaSE-1.6 9 | Import-Package: org.osgi.framework;version="1.3.0" 10 | Bundle-ActivationPolicy: lazy 11 | Require-Bundle: org.eclipse.gef;bundle-version="3.6.2", 12 | org.eclipse.ui.views;bundle-version="3.5.1", 13 | org.eclipse.ui.editors;bundle-version="3.6.1", 14 | org.eclipse.ui.ide;bundle-version="3.6.2", 15 | org.eclipse.ui;bundle-version="3.6.2", 16 | org.eclipse.core.runtime;bundle-version="3.6.0", 17 | org.eclipse.core.resources;bundle-version="3.6.1", 18 | org.eclipse.ui.console;bundle-version="3.5.0", 19 | org.junit, 20 | com.xrosstools.common;bundle-version="1.0.0", 21 | org.eclipse.jdt.core 22 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/requests/DecisionTreeResizeRequest.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.requests; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | 5 | public class DecisionTreeResizeRequest { 6 | private DecisionTreeDiagram diagram; 7 | private boolean horizantal; 8 | private boolean nodeSize; 9 | private boolean increase; 10 | 11 | public DecisionTreeResizeRequest(DecisionTreeDiagram diagram, boolean nodeSize, boolean horizantal, boolean increase){ 12 | this.diagram = diagram; 13 | this.horizantal = horizantal; 14 | this.nodeSize = nodeSize; 15 | this.increase = increase; 16 | } 17 | 18 | public DecisionTreeDiagram getDiagram() { 19 | return diagram; 20 | } 21 | 22 | public boolean isHorizantal() { 23 | return horizantal; 24 | } 25 | 26 | public boolean isIncrease() { 27 | return increase; 28 | } 29 | 30 | public boolean isNodeSize() { 31 | return nodeSize; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/java/com/xrosstools/xdecision/AllTests.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | import org.junit.runner.RunWith; 4 | import org.junit.runners.Suite; 5 | import org.junit.runners.Suite.SuiteClasses; 6 | 7 | import com.xrosstools.xdecision.ext.ExpressionCompilerTest; 8 | import com.xrosstools.xdecision.ext.TokenParserTest; 9 | import com.xrosstools.xdecision.sample.*; 10 | 11 | @RunWith(Suite.class) 12 | @SuiteClasses({ 13 | ExpressionCompilerTest.class, 14 | TokenParserTest.class, 15 | Chose_collection_method_v1_Test.class, 16 | Chose_collection_method_v2_Test.class, 17 | DecisionRuleTest.class, 18 | ExpressionTest.class, 19 | NumberComparationTest.class, 20 | ObjectValidationTest.class, 21 | RangeValidationTest.class, 22 | SampleTest.class, 23 | SampleV2Test.class, 24 | StringValidationTest.class, 25 | XrossEvaluatorTest.class, 26 | XrossEvaluatorUnitTest.class, 27 | }) 28 | public class AllTests { 29 | 30 | } 31 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/requests/DecisionTreeLayoutRequest.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.requests; 2 | 3 | import org.eclipse.gef.Request; 4 | import org.eclipse.gef.RequestConstants; 5 | 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 7 | 8 | public class DecisionTreeLayoutRequest extends Request { 9 | private DecisionTreeDiagram diagram; 10 | private boolean isHorizantal; 11 | private float alignment; 12 | 13 | public DecisionTreeLayoutRequest(DecisionTreeDiagram diagram, boolean isHorizantal, float alignment){ 14 | super(RequestConstants.REQ_ALIGN); 15 | this.diagram = diagram; 16 | this.alignment = alignment; 17 | this.isHorizantal = isHorizantal; 18 | } 19 | 20 | public boolean isHorizantal() { 21 | return isHorizantal; 22 | } 23 | 24 | public float getAlignment() { 25 | return alignment; 26 | } 27 | 28 | public DecisionTreeDiagram getDiagram() { 29 | return diagram; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/actions/CommandChain.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.actions; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.eclipse.gef.commands.Command; 7 | 8 | public class CommandChain extends Command{ 9 | private List commands = new ArrayList(); 10 | public void add(Command cmd) { 11 | commands.add(cmd); 12 | } 13 | 14 | public void execute() { 15 | for(Command cmd: commands) 16 | if(cmd.canExecute()) 17 | cmd.execute(); 18 | } 19 | 20 | public void redo() { 21 | for(Command cmd: commands) 22 | if(cmd.canRedo()) 23 | cmd.redo(); 24 | } 25 | 26 | public void undo() { 27 | for(int i = commands.size() -1; i >= 0; i--) { 28 | Command cmd = commands.get(i); 29 | if(cmd.canUndo()) 30 | cmd.undo(); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/AddFactorCommand2.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeFactor; 7 | 8 | public class AddFactorCommand2 extends Command{ 9 | private DecisionTreeDiagram diagram; 10 | private DecisionTreeFactor factor; 11 | 12 | public AddFactorCommand2(DecisionTreeDiagram diagram, DecisionTreeFactor factor){ 13 | this.diagram = diagram; 14 | this.factor = factor; 15 | } 16 | 17 | public void execute() { 18 | diagram.getFactors().add(factor); 19 | } 20 | 21 | public String getLabel() { 22 | return "Create new factor"; 23 | } 24 | 25 | public void redo() { 26 | execute(); 27 | } 28 | 29 | public void undo() { 30 | diagram.getFactors().remove(factor); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/parts/expression/BaseExpressionPart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.parts.expression; 2 | 3 | import com.xrosstools.idea.gef.parts.AbstractGraphicalEditPart; 4 | import com.xrosstools.xdecision.idea.editor.model.expression.ExpressionDefinition; 5 | 6 | import java.beans.PropertyChangeListener; 7 | 8 | public abstract class BaseExpressionPart extends AbstractGraphicalEditPart implements PropertyChangeListener { 9 | //Do not remove the following. It allows refresh when property change 10 | public void activate() { 11 | super.activate(); 12 | ((ExpressionDefinition) getModel()).getListeners().addPropertyChangeListener(this); 13 | } 14 | 15 | //Do not remove the following. It allows refresh when property change 16 | public void deactivate() { 17 | super.deactivate(); 18 | ((ExpressionDefinition) getModel()).getListeners().removePropertyChangeListener(this); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/actions/DecisionTreeLayoutAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.actions; 2 | 3 | import com.xrosstools.idea.gef.actions.Action; 4 | import com.xrosstools.idea.gef.commands.Command; 5 | import com.xrosstools.xdecision.idea.editor.commands.LayoutTreeCommand; 6 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 7 | 8 | public class DecisionTreeLayoutAction extends Action implements DecisionTreeActionConstants { 9 | private boolean horizantal; 10 | private float alignment; 11 | private DecisionTreeDiagram diagram; 12 | 13 | public DecisionTreeLayoutAction(boolean horizantal, float alignment){ 14 | this.alignment = alignment; 15 | this.horizantal = horizantal; 16 | } 17 | 18 | public void setDiagram(DecisionTreeDiagram diagram) { 19 | this.diagram = diagram; 20 | } 21 | 22 | @Override 23 | public Command createCommand() { 24 | return new LayoutTreeCommand(diagram, horizantal, alignment); 25 | } 26 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/definition/NamedElementContainerTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.XdecisionsIcons; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElement; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElementContainer; 6 | 7 | import javax.swing.*; 8 | import java.util.List; 9 | 10 | public class NamedElementContainerTreePart extends NamedElementTreePart { 11 | private NamedElementContainer container; 12 | public NamedElementContainerTreePart(Object model) { 13 | super(model); 14 | container = (NamedElementContainer)model; 15 | } 16 | 17 | @Override 18 | public List getModelChildren() { 19 | return ((NamedElementContainer)getModel()).getElements(); 20 | } 21 | 22 | public Icon getImage() { 23 | return XdecisionsIcons.TREE; 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/ElementExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class ElementExpression extends ExtensibleExpression { 4 | private ExpressionDefinition indexExpression; 5 | 6 | public ElementExpression () { 7 | this(new PlaceholderExpression("index")); 8 | } 9 | public ElementExpression (ExpressionDefinition indexExpression) { 10 | setIndexExpression(indexExpression); 11 | } 12 | 13 | public ExpressionDefinition getIndexExpression() { 14 | return indexExpression; 15 | } 16 | 17 | public void setIndexExpression(ExpressionDefinition indexExpression) { 18 | this.indexExpression = indexExpression; 19 | indexExpression.getListeners().addPropertyChangeListener(this); 20 | propertyChanged(); 21 | } 22 | 23 | @Override 24 | public String getBaseString() { 25 | return "[" + indexExpression.toString() + "]"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/AddFactorCommand2.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 5 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeFactor; 6 | 7 | public class AddFactorCommand2 extends Command { 8 | private DecisionTreeDiagram diagram; 9 | private DecisionTreeFactor factor; 10 | 11 | public AddFactorCommand2(DecisionTreeDiagram diagram, DecisionTreeFactor factor){ 12 | this.diagram = diagram; 13 | this.factor = factor; 14 | } 15 | 16 | public void execute() { 17 | diagram.getFactors().add(factor); 18 | } 19 | 20 | public String getLabel() { 21 | return "Create new factor"; 22 | } 23 | 24 | public void redo() { 25 | execute(); 26 | } 27 | 28 | public void undo() { 29 | diagram.getFactors().remove(factor); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/definition/DataTypeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.XdecisionsIcons; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.DataType; 5 | 6 | import javax.swing.*; 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | public class DataTypeTreePart extends NamedElementTreePart { 11 | private DataType type; 12 | public DataTypeTreePart(Object model) { 13 | super(model); 14 | type = (DataType)model; 15 | } 16 | 17 | @Override 18 | public List getModelChildren() { 19 | List a = new ArrayList(); 20 | a.add(type.getFields()); 21 | a.add(type.getMethods()); 22 | return a; 23 | } 24 | 25 | public String getText() { 26 | return type.toString(); 27 | } 28 | 29 | public Icon getImage() { 30 | return XdecisionsIcons.NODE; 31 | } 32 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/MapFacts.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * Default implementation, which use a map internally to hold the factory values. 8 | * This is useful for cases that the calculation of facts is cheap. 9 | * @author Jerry He 10 | */ 11 | public class MapFacts implements Facts { 12 | private Map values = new HashMap(); 13 | 14 | @Override 15 | public Object get(String name) { 16 | return values.get(name); 17 | } 18 | 19 | public void set(String name, Object value) { 20 | values.put(name, value); 21 | } 22 | 23 | public void reset() { 24 | values.clear(); 25 | } 26 | 27 | @Override 28 | public String[] getNames() { 29 | return values.keySet().toArray(new String[values.size()]); 30 | 31 | } 32 | 33 | @Override 34 | public boolean contains(String name) { 35 | return values.containsKey(name); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/InternalFact.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | import com.xrosstools.xdecision.UserDefinedContext; 5 | 6 | public class InternalFact implements Facts{ 7 | private UserDefinedContext context; 8 | private Facts facts; 9 | 10 | public InternalFact(Facts facts, UserDefinedContext context) { 11 | this.facts = facts; 12 | this.context = context; 13 | } 14 | 15 | @Override 16 | public String[] getNames() { 17 | return UserDefinedContext.merge(facts, context); 18 | } 19 | 20 | @Override 21 | public Object get(String name) { 22 | if(facts.contains(name)) 23 | return facts.get(name); 24 | 25 | return context.get(name); 26 | } 27 | 28 | @Override 29 | public boolean contains(String name) { 30 | if(facts.contains(name)) 31 | return facts.contains(name); 32 | 33 | return context.contains(name); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/NegtiveExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public class NegtiveExpression implements Expression { 6 | private Expression exp; 7 | 8 | public NegtiveExpression(Expression exp) { 9 | this.exp = exp; 10 | } 11 | 12 | @Override 13 | public Number evaluate(Facts facts) { 14 | Number num = ((Number)exp.evaluate(facts)); 15 | 16 | if(num instanceof Integer) 17 | return num.intValue() * -1; 18 | 19 | if(num instanceof Long) 20 | return num.longValue() * -1; 21 | 22 | if(num instanceof Double) 23 | return num.doubleValue() * -1; 24 | 25 | if(num instanceof Float) 26 | return num.floatValue() * -1; 27 | 28 | if(num instanceof Short) 29 | return num.shortValue() * -1; 30 | 31 | //Only Byte left 32 | return num.byteValue() * -1; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/ElementExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class ElementExpression extends ExtensibleExpression { 4 | private ExpressionDefinition indexExpression; 5 | 6 | public ElementExpression () { 7 | this(new PlaceholderExpression("index")); 8 | } 9 | public ElementExpression (ExpressionDefinition indexExpression) { 10 | setIndexExpression(indexExpression); 11 | } 12 | 13 | public ExpressionDefinition getIndexExpression() { 14 | return indexExpression; 15 | } 16 | 17 | public void setIndexExpression(ExpressionDefinition indexExpression) { 18 | unlisten(this.indexExpression); 19 | this.indexExpression = indexExpression; 20 | listen(indexExpression); 21 | propertyChanged(); 22 | } 23 | 24 | @Override 25 | public String getBaseString() { 26 | return "[" + indexExpression.toString() + "]"; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/actions/DecisionTreeActionConstants.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.actions; 2 | 3 | public interface DecisionTreeActionConstants { 4 | String ID_PREFIX = "com.xrosstools.xdecision.editor."; 5 | 6 | String ALIGN_LEFT = "alignment_left"; 7 | String ALIGN_CENTER = "alignment_center"; 8 | String ALIGN_RIGHT = "alignment_right"; 9 | 10 | String ALIGN_BOTTOM = "alignment_bottom"; 11 | String ALIGN_MIDDLE = "alignment_middle"; 12 | String ALIGN_TOP = "alignment_top"; 13 | 14 | String INCREASE_VERTICAL_SPACE = "increase_vertical_space"; 15 | String DECREASE_VERTICAL_SPACE = "decrease_vertical_space"; 16 | 17 | String INCREASE_HORIZANTAL_SPACE = "increase_horizantal_space"; 18 | String DECREASE_HORIZANTAL_SPACE = "decrease_horizantal_space"; 19 | 20 | String GEN_TEST_CODE = "generate_test_code"; 21 | String GEN_JUNIT_TEST_CODE = "generate_junit_test_code"; 22 | String CREATE_NEW_DECISION = "create_new_decision"; 23 | String CREATE_NEW_FACTOR = "create_new_factor"; 24 | } 25 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/definition/DeleteMethodCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands.definition; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.definition.DataType; 6 | import com.xrosstools.xdecision.editor.model.definition.MethodDefinition; 7 | 8 | public class DeleteMethodCommand extends Command{ 9 | private DataType parent; 10 | private MethodDefinition method; 11 | 12 | public DeleteMethodCommand( 13 | DataType parent, 14 | MethodDefinition field){ 15 | this.parent = parent; 16 | this.method = field; 17 | } 18 | 19 | public void execute() { 20 | parent.getMethods().remove(method); 21 | } 22 | 23 | public String getLabel() { 24 | return "Delete methos"; 25 | } 26 | 27 | public void redo() { 28 | execute(); 29 | } 30 | 31 | public void undo() { 32 | parent.getMethods().add(method); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/treeparts/definition/NamedElementContainerTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.treeparts.definition; 2 | 3 | import java.util.List; 4 | 5 | import org.eclipse.swt.graphics.Image; 6 | 7 | import com.xrosstools.xdecision.editor.Activator; 8 | import com.xrosstools.xdecision.editor.model.definition.NamedElement; 9 | import com.xrosstools.xdecision.editor.model.definition.NamedElementContainer; 10 | 11 | public class NamedElementContainerTreePart extends NamedElementTreePart { 12 | private NamedElementContainer container; 13 | public NamedElementContainerTreePart(Object model) { 14 | super(model); 15 | container = (NamedElementContainer)model; 16 | } 17 | 18 | @Override 19 | protected List getModelChildren() { 20 | return ((NamedElementContainer)getModel()).getElements(); 21 | } 22 | 23 | protected Image getImage() { 24 | return Activator.getDefault().getImage(com.xrosstools.xdecision.editor.Activator.TREE); 25 | } 26 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/definition/DeleteMethodCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands.definition; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.DataType; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.MethodDefinition; 6 | 7 | public class DeleteMethodCommand extends Command { 8 | private DataType parent; 9 | private MethodDefinition method; 10 | 11 | public DeleteMethodCommand( 12 | DataType parent, 13 | MethodDefinition field){ 14 | this.parent = parent; 15 | this.method = field; 16 | } 17 | 18 | public void execute() { 19 | parent.getMethods().remove(method); 20 | } 21 | 22 | public String getLabel() { 23 | return "Delete methos"; 24 | } 25 | 26 | public void redo() { 27 | execute(); 28 | } 29 | 30 | public void undo() { 31 | parent.getMethods().add(method); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/XDecisionPath.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | import java.util.List; 4 | 5 | public class XDecisionPath { 6 | public static class XDecisionPathEntry { 7 | private String nodeExpression; 8 | private Object value; 9 | 10 | public XDecisionPathEntry(String nodeExpression, Object value) { 11 | this.nodeExpression = nodeExpression; 12 | this.value = value; 13 | } 14 | 15 | public String getNodeExpression() { 16 | return nodeExpression; 17 | } 18 | 19 | public Object getValue() { 20 | return value; 21 | } 22 | } 23 | 24 | private List path; 25 | private T decision; 26 | 27 | public XDecisionPath(List path, T decision) { 28 | this.path = path; 29 | this.decision = decision; 30 | } 31 | 32 | public int length() { 33 | return path.size(); 34 | } 35 | 36 | public XDecisionPathEntry getPathEntry(int depth) { 37 | return path.get(depth); 38 | } 39 | 40 | public T getDecision() { 41 | return decision; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/expression/ChangeOperatorCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands.expression; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.expression.OperatorEnum; 6 | import com.xrosstools.xdecision.editor.model.expression.OperatorExpression; 7 | 8 | public class ChangeOperatorCommand extends Command{ 9 | private OperatorExpression op; 10 | private OperatorEnum oldType; 11 | private OperatorEnum newType; 12 | 13 | public ChangeOperatorCommand(OperatorExpression op, OperatorEnum newType){ 14 | this.op = op; 15 | this.oldType = op.getOperator(); 16 | this.newType = newType; 17 | } 18 | 19 | public void execute() { 20 | redo(); 21 | } 22 | 23 | public String getLabel() { 24 | return "Change operator"; 25 | } 26 | 27 | public void redo() { 28 | op.setOperator(newType); 29 | } 30 | 31 | public void undo() { 32 | op.setOperator(oldType); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/treeparts/definition/DataTypeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.treeparts.definition; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.eclipse.swt.graphics.Image; 7 | 8 | import com.xrosstools.xdecision.editor.Activator; 9 | import com.xrosstools.xdecision.editor.model.definition.DataType; 10 | 11 | public class DataTypeTreePart extends NamedElementTreePart { 12 | private DataType type; 13 | public DataTypeTreePart(Object model) { 14 | super(model); 15 | type = (DataType)model; 16 | } 17 | 18 | @Override 19 | protected List getModelChildren() { 20 | List a = new ArrayList(); 21 | a.add(type.getFields()); 22 | a.add(type.getMethods()); 23 | return a; 24 | } 25 | 26 | protected String getText() { 27 | return type.toString(); 28 | } 29 | 30 | protected Image getImage() { 31 | return Activator.getDefault().getImage(com.xrosstools.xdecision.editor.Activator.NODE); 32 | } 33 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/definition/CreateUserDefineidTypeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands.definition; 2 | 3 | import com.xrosstools.xdecision.editor.commands.InputTextCommand; 4 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 5 | import com.xrosstools.xdecision.editor.model.definition.DataType; 6 | 7 | public class CreateUserDefineidTypeCommand extends InputTextCommand{ 8 | private DecisionTreeDiagram diagram; 9 | private DataType newType; 10 | 11 | public CreateUserDefineidTypeCommand(DecisionTreeDiagram diagram){ 12 | this.diagram = diagram; 13 | } 14 | 15 | public void execute() { 16 | newType = new DataType(getInputText()); 17 | redo(); 18 | } 19 | 20 | public String getLabel() { 21 | return "Create new decision"; 22 | } 23 | 24 | public void redo() { 25 | diagram.getUserDefinedTypeList().add(newType); 26 | } 27 | 28 | public void undo() { 29 | diagram.getUserDefinedTypeList().remove(newType); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/definition/DeleteElementCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands.definition; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.definition.NamedElement; 6 | import com.xrosstools.xdecision.editor.model.definition.NamedElementContainer; 7 | 8 | public class DeleteElementCommand extends Command{ 9 | private NamedElementContainer container; 10 | private NamedElement element; 11 | 12 | public DeleteElementCommand( 13 | NamedElementContainer container, 14 | NamedElement element){ 15 | this.container = container; 16 | this.element = element; 17 | } 18 | 19 | public void execute() { 20 | redo(); 21 | } 22 | 23 | public String getLabel() { 24 | return "Delete element"; 25 | } 26 | 27 | public void redo() { 28 | container.remove(element); 29 | } 30 | 31 | public void undo() { 32 | container.add(element); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/SingleOperandExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public class SingleOperandExpression extends OperandExpression { 6 | public Expression leftExp; 7 | 8 | public SingleOperandExpression(Expression leftExp, String operator) { 9 | super(operator); 10 | this.leftExp = leftExp; 11 | } 12 | 13 | @Override 14 | public Boolean evaluate(Facts facts) { 15 | switch (operator) { 16 | case IS_NULL: 17 | return leftExp.evaluate(facts) == null; 18 | case IS_NOT_NULL: 19 | return leftExp.evaluate(facts) != null; 20 | case IS_TRUE: 21 | return leftExp.evaluate(facts) == Boolean.TRUE; 22 | case IS_FALSE: 23 | return leftExp.evaluate(facts) == Boolean.FALSE; 24 | default: 25 | throw new IllegalArgumentException("Operator: " + operator + " is not supported!"); 26 | } 27 | } 28 | 29 | @Override 30 | public String getPath() { 31 | return ""; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/expression/ChangeOperatorCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands.expression; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.expression.OperatorEnum; 5 | import com.xrosstools.xdecision.idea.editor.model.expression.OperatorExpression; 6 | 7 | public class ChangeOperatorCommand extends Command { 8 | private OperatorExpression op; 9 | private OperatorEnum oldType; 10 | private OperatorEnum newType; 11 | 12 | public ChangeOperatorCommand(OperatorExpression op, OperatorEnum newType){ 13 | this.op = op; 14 | this.oldType = op.getOperator(); 15 | this.newType = newType; 16 | } 17 | 18 | public void execute() { 19 | redo(); 20 | } 21 | 22 | public String getLabel() { 23 | return "Change operator"; 24 | } 25 | 26 | public void redo() { 27 | op.setOperator(newType); 28 | } 29 | 30 | public void undo() { 31 | op.setOperator(oldType); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/parts/expression/BasicExpressionPart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.parts.expression; 2 | 3 | 4 | import com.xrosstools.idea.gef.figures.Figure; 5 | import com.xrosstools.xdecision.idea.editor.figures.BasicExpressionFigure; 6 | import com.xrosstools.xdecision.idea.editor.model.expression.BasicExpression; 7 | import com.xrosstools.xdecision.idea.editor.model.expression.PlaceholderExpression; 8 | 9 | import java.awt.*; 10 | 11 | public class BasicExpressionPart extends BaseExpressionPart { 12 | protected Figure createFigure() { 13 | BasicExpressionFigure figure = new BasicExpressionFigure(); 14 | 15 | if(getModel() instanceof PlaceholderExpression) 16 | figure.setForegroundColor(Color.gray); 17 | 18 | return figure; 19 | } 20 | 21 | protected void refreshVisuals() { 22 | BasicExpression node = (BasicExpression) getModel(); 23 | BasicExpressionFigure figure = (BasicExpressionFigure)getFigure(); 24 | figure.setText(node.getDisplayText()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/definition/DeleteElementCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands.definition; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElement; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElementContainer; 6 | 7 | public class DeleteElementCommand extends Command { 8 | private NamedElementContainer container; 9 | private NamedElement element; 10 | 11 | public DeleteElementCommand( 12 | NamedElementContainer container, 13 | NamedElement element){ 14 | this.container = container; 15 | this.element = element; 16 | } 17 | 18 | public void execute() { 19 | redo(); 20 | } 21 | 22 | public String getLabel() { 23 | return "Delete element"; 24 | } 25 | 26 | public void redo() { 27 | container.remove(element); 28 | } 29 | 30 | public void undo() { 31 | container.add(element); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/LayoutTreeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 6 | 7 | public class LayoutTreeCommand extends Command { 8 | private DecisionTreeDiagram diagram; 9 | private boolean oldOrintation; 10 | private boolean orintation; 11 | private float oldAlignment; 12 | private float alignment; 13 | public LayoutTreeCommand(DecisionTreeDiagram diagram, boolean isHorizantal, float alignment){ 14 | this.diagram = diagram; 15 | oldOrintation = diagram.isHorizantal(); 16 | oldAlignment = diagram.getAlignment(); 17 | this.alignment = alignment; 18 | orintation = isHorizantal; 19 | } 20 | 21 | public void execute() { 22 | diagram.setAlignment(alignment); 23 | diagram.setHorizantal(orintation); 24 | } 25 | 26 | public void redo() { 27 | execute(); 28 | } 29 | 30 | public void undo() { 31 | diagram.setAlignment(oldAlignment); 32 | diagram.setHorizantal(oldOrintation); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/ExpressionDefinition.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | import java.beans.PropertyChangeEvent; 4 | import java.beans.PropertyChangeListener; 5 | import java.beans.PropertyChangeSupport; 6 | 7 | public abstract class ExpressionDefinition implements PropertyChangeListener { 8 | private String COMMON_PROP = ""; 9 | private Object COMMON_OLD_OBJECT = new Object(); 10 | private Object COMMON_NEW_OBJECT = new Object(); 11 | private PropertyChangeSupport listeners = new PropertyChangeSupport(this); 12 | 13 | public PropertyChangeSupport getListeners() { 14 | return listeners; 15 | } 16 | 17 | public void propertyChanged() { 18 | listeners.firePropertyChange(COMMON_PROP, COMMON_OLD_OBJECT, COMMON_NEW_OBJECT); 19 | } 20 | 21 | @Override 22 | public void propertyChange(PropertyChangeEvent evt) { 23 | propertyChanged(); 24 | } 25 | 26 | @Override 27 | public String toString() { 28 | throw new IllegalStateException("Sub class needs to implement this"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/resources/expression.xdecision: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | com.xrosstools.xdecision.ext.AviatorPathEvaluator 7 | 8 | 9 | < 20 10 | > 20 11 | 12 | 13 | == true 14 | == false 15 | 16 | 17 | == 'abc' 18 | == 'def' 19 | 20 | 21 | 22 | 0:0 23 | 0:1 24 | 0:0|1:0 25 | 0:0|1:1 26 | 0:1|2:0 27 | 0:1|2:1 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/ReferenceExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.lang.reflect.Field; 4 | 5 | import com.xrosstools.xdecision.Facts; 6 | 7 | public class ReferenceExpression extends LeftExpression { 8 | private String name; 9 | 10 | public ReferenceExpression(String name) { 11 | super(); 12 | this.name = name; 13 | } 14 | 15 | @Override 16 | public Object evaluate(Facts facts) { 17 | //The first variable 18 | if(leftExp == null) 19 | return facts.get(name); 20 | 21 | Object parent = leftExp.evaluate(facts); 22 | if(parent instanceof EnumType) 23 | return ((EnumType)parent).valueOf(name); 24 | 25 | try { 26 | Field f = parent.getClass().getDeclaredField(name); 27 | f.setAccessible(true); 28 | return f.get(parent); 29 | } catch (Throwable e) { 30 | throw new IllegalArgumentException("Unable to access field: " + name, e); 31 | } 32 | } 33 | 34 | @Override 35 | public String toString() { 36 | return name; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/EnumValue.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | public class EnumValue { 4 | private EnumType parent; 5 | private String name; 6 | public EnumValue(EnumType parent, String name) { 7 | super(); 8 | this.parent = parent; 9 | this.name = name; 10 | } 11 | public EnumType getParent() { 12 | return parent; 13 | } 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | @Override 19 | public boolean equals(Object o) { 20 | if(o == null) 21 | return false; 22 | 23 | if(o == this) 24 | return true; 25 | 26 | if(o.getClass().isEnum()) { 27 | if(o.getClass().getSimpleName().equals(getParent().getName())) 28 | return o.toString().equals(name); 29 | return false; 30 | } 31 | 32 | if(o instanceof EnumValue) { 33 | EnumValue ev = (EnumValue)o; 34 | return ev.getParent() == getParent(); 35 | } 36 | return false; 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return name; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/TokenExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public class TokenExpression extends BasicExpression { 4 | public static final TokenExpression TOKEN_DOT = new TokenExpression("."); 5 | public static final TokenExpression TOKEN_COMMA = new TokenExpression(","); 6 | public static final TokenExpression TOKEN_SPACE = new TokenExpression(" "); 7 | public static final TokenExpression TOKEN_LBRKT = new TokenExpression("("); 8 | public static final TokenExpression TOKEN_RBRKT = new TokenExpression(")"); 9 | public static final TokenExpression TOKEN_LSBRKT = new TokenExpression("["); 10 | public static final TokenExpression TOKEN_RSBRKT = new TokenExpression("]"); 11 | public static final TokenExpression TOKEN_EMPTY = new TokenExpression(""); 12 | 13 | private String token; 14 | public TokenExpression(String token) { 15 | this.token = token; 16 | } 17 | 18 | public String getToken() { 19 | return token; 20 | } 21 | 22 | @Override 23 | public String getDisplayText() { 24 | return getToken(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/MoveNodeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.draw2d.geometry.Rectangle; 4 | import org.eclipse.gef.commands.Command; 5 | 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 7 | 8 | public class MoveNodeCommand extends Command { 9 | private DecisionTreeNode node; 10 | 11 | private Rectangle oldConstraint; 12 | 13 | private Rectangle newConstraint; 14 | 15 | public void setConstraint(Rectangle c) { 16 | newConstraint = c; 17 | } 18 | 19 | public void setNode(DecisionTreeNode node) { 20 | this.node = node; 21 | } 22 | 23 | public void execute() { 24 | oldConstraint = new Rectangle(); 25 | oldConstraint.setLocation(node.getLocation()); 26 | node.setLocation(newConstraint.getLocation()); 27 | } 28 | 29 | public String getLabel() { 30 | return "Move Node"; 31 | } 32 | 33 | public void redo() { 34 | node.setLocation(newConstraint.getLocation()); 35 | } 36 | 37 | public void undo() { 38 | node.setLocation(oldConstraint.getLocation()); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/OperandParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public abstract class OperandParser implements XrossEvaluatorConstants { 7 | public abstract Expression parse(String nodeExpression, String operator, String pathExpression); 8 | 9 | private TokenParser tokenParser = new TokenParser(); 10 | private ExpressionCompiler compiler = new ExpressionCompiler(); 11 | 12 | public Expression parseNodeExpression(String expressionStr) { 13 | List tokens = tokenParser.parseToken(expressionStr); 14 | return compiler.compile(tokens); 15 | } 16 | 17 | public List parseParameterExpressions(String expressionStr) { 18 | if(expressionStr == null) { 19 | ArrayList params = new ArrayList<>(); 20 | params.add(RawValue.NULL_OBJ); 21 | return params; 22 | } 23 | 24 | List tokens = tokenParser.parseToken(expressionStr); 25 | ParametersExpression params = (ParametersExpression)compiler.compile(ExpressionType.P, tokens); 26 | return params.getParams(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/ExtensibleExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public abstract class ExtensibleExpression extends ExpressionDefinition { 4 | private ExpressionDefinition childExpression; 5 | 6 | public ExpressionDefinition getChildExpression() { 7 | return childExpression; 8 | } 9 | 10 | public void setChildExpression(ExpressionDefinition expression) { 11 | unlisten(this.childExpression); 12 | this.childExpression = expression; 13 | listen(childExpression); 14 | propertyChanged(); 15 | } 16 | 17 | public boolean hasChild() { 18 | return childExpression != null; 19 | } 20 | 21 | public boolean isElementChild() { 22 | return hasChild() && childExpression instanceof ElementExpression; 23 | } 24 | 25 | 26 | @Override 27 | public final String toString() { 28 | if(!hasChild()) 29 | return getBaseString(); 30 | 31 | return getBaseString() + (isElementChild() ? "" : ".") + childExpression; 32 | } 33 | 34 | public abstract String getBaseString(); 35 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/TokenExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | public class TokenExpression extends BasicExpression { 4 | public static final TokenExpression TOKEN_DOT = new TokenExpression("."); 5 | public static final TokenExpression TOKEN_COMMA = new TokenExpression(","); 6 | public static final TokenExpression TOKEN_SPACE = new TokenExpression(" "); 7 | public static final TokenExpression TOKEN_LBRKT = new TokenExpression("("); 8 | public static final TokenExpression TOKEN_RBRKT = new TokenExpression(")"); 9 | public static final TokenExpression TOKEN_LSBRKT = new TokenExpression("["); 10 | public static final TokenExpression TOKEN_RSBRKT = new TokenExpression("]"); 11 | public static final TokenExpression TOKEN_EMPTY = new TokenExpression(""); 12 | 13 | private String token; 14 | public TokenExpression(String token) { 15 | this.token = token; 16 | } 17 | 18 | public String getToken() { 19 | return token; 20 | } 21 | 22 | @Override 23 | public String getDisplayText() { 24 | return getToken(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/ExtensibleExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | public abstract class ExtensibleExpression extends ExpressionDefinition { 4 | private ExpressionDefinition childExpression; 5 | 6 | public ExpressionDefinition getChildExpression() { 7 | return childExpression; 8 | } 9 | 10 | public void setChildExpression(ExpressionDefinition expression) { 11 | this.childExpression = expression; 12 | if(childExpression != null) 13 | this.childExpression.getListeners().addPropertyChangeListener(this); 14 | propertyChanged(); 15 | } 16 | 17 | public boolean hasChild() { 18 | return childExpression != null; 19 | } 20 | 21 | public boolean isElementChild() { 22 | return hasChild() && childExpression instanceof ElementExpression; 23 | } 24 | 25 | 26 | @Override 27 | public final String toString() { 28 | if(!hasChild()) 29 | return getBaseString(); 30 | 31 | return getBaseString() + (isElementChild() ? "" : ".") + childExpression; 32 | } 33 | 34 | public abstract String getBaseString(); 35 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/LayoutTreeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 5 | 6 | public class LayoutTreeCommand extends Command { 7 | private DecisionTreeDiagram diagram; 8 | private boolean oldOrintation; 9 | private boolean orintation; 10 | private float oldAlignment; 11 | private float alignment; 12 | public LayoutTreeCommand(DecisionTreeDiagram diagram, boolean isHorizantal, float alignment){ 13 | this.diagram = diagram; 14 | oldOrintation = diagram.isHorizantal(); 15 | oldAlignment = diagram.getAlignment(); 16 | this.alignment = alignment; 17 | orintation = isHorizantal; 18 | } 19 | 20 | public void execute() { 21 | diagram.setAlignment(alignment); 22 | diagram.setHorizantal(orintation); 23 | } 24 | 25 | public String getLabel() { 26 | return "Layout tree"; 27 | } 28 | 29 | public void redo() { 30 | execute(); 31 | } 32 | 33 | public void undo() { 34 | diagram.setAlignment(oldAlignment); 35 | diagram.setHorizantal(oldOrintation); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/OperandExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | public abstract class OperandExpression implements Expression, XrossEvaluatorConstants { 4 | protected String operator; 5 | 6 | public OperandExpression(String operator) { 7 | this.operator = operator; 8 | } 9 | 10 | public int compare(Object v1, Object v2) { 11 | if(v1 instanceof Number && v2 instanceof Number) 12 | return Double.compare(((Number)v1).doubleValue(), ((Number)v2).doubleValue()); 13 | 14 | if(v1 instanceof String && v2 instanceof String) 15 | return ((String)v1).compareTo((String)v2); 16 | 17 | if(v1 instanceof Comparable && v2 instanceof Comparable) 18 | return ((Comparable)v1).compareTo((Comparable)v2); 19 | 20 | if(v1 == v2 || v1.equals(v2)) 21 | return 0; 22 | 23 | throw new IllegalArgumentException(String.valueOf(v1) + " can not be compared to " + v2); 24 | } 25 | 26 | 27 | 28 | @Override 29 | public String toString() { 30 | return String.format("%s %s", operator, getPath()); 31 | } 32 | 33 | abstract public String getPath(); 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/ReconnectParentCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeNodeConnection; 7 | 8 | public class ReconnectParentCommand extends Command { 9 | 10 | private DecisionTreeNodeConnection path; 11 | private DecisionTreeNode oldParent; 12 | private DecisionTreeNode newParent; 13 | 14 | public ReconnectParentCommand(DecisionTreeNodeConnection path, DecisionTreeNode newParent){ 15 | this.path = path; 16 | this.newParent = newParent; 17 | oldParent = path.getParent(); 18 | } 19 | 20 | public boolean canExecute() { 21 | if (path.getChild().equals(newParent)) 22 | return false; 23 | 24 | if (path.getParent().equals(newParent)) 25 | return false; 26 | 27 | return true; 28 | } 29 | 30 | public void execute() { 31 | oldParent.removeOutput(path); 32 | path.setParent(newParent); 33 | newParent.addOutput(path); 34 | } 35 | 36 | public void undo() { 37 | newParent.removeOutput(path); 38 | path.setParent(oldParent); 39 | oldParent.addOutput(path); 40 | } 41 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/CreateNodeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 5 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNode; 6 | 7 | import java.awt.*; 8 | 9 | public class CreateNodeCommand extends Command { 10 | private DecisionTreeDiagram diagram; 11 | private DecisionTreeNode node; 12 | private Point location; 13 | 14 | public CreateNodeCommand( 15 | DecisionTreeDiagram diagram, 16 | DecisionTreeNode node, 17 | Point location){ 18 | this.diagram = diagram; 19 | this.node = node; 20 | this.location = location; 21 | } 22 | 23 | public void execute() { 24 | node.setLocation(location); 25 | node.setSize(new Dimension(diagram.getNodeWidth(), diagram.getNodeHeight())); 26 | diagram.addNode(node); 27 | } 28 | 29 | public String getLabel() { 30 | return "Create Node"; 31 | } 32 | 33 | public void redo() { 34 | execute(); 35 | } 36 | 37 | public void undo() { 38 | diagram.removeNode(node); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/resources/Sample.xdecision: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | below 20 7 | above 20 8 | 9 | 10 | Level 1 11 | Level 2 12 | Level 3 13 | 14 | 15 | Yes 16 | No 17 | 18 | 19 | worker 20 | teacher 21 | student 22 | 23 | 24 | 25 | 0:0 26 | 0:1 27 | 0:1|2:0 28 | 0:1|2:1 29 | 0:0|1:2 30 | 0:0|1:0 31 | 0:0|1:1 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/AviatorPathEvaluator.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import com.googlecode.aviator.AviatorEvaluator; 7 | import com.googlecode.aviator.AviatorEvaluatorInstance; 8 | import com.xrosstools.xdecision.Facts; 9 | import com.xrosstools.xdecision.PathEvaluator; 10 | 11 | public class AviatorPathEvaluator implements PathEvaluator { 12 | private AviatorEvaluatorInstance instance = AviatorEvaluator.newInstance(); 13 | 14 | @Override 15 | public Object evaluate(Facts facts, String factorExpression, Object[] paths) { 16 | Map env = toEnv(facts); 17 | for(Object path: paths) { 18 | Boolean match = (Boolean)instance.execute(String.format("%s %s", factorExpression, path), env, true); 19 | 20 | if(match) 21 | return path; 22 | } 23 | 24 | return null; 25 | } 26 | 27 | private Map toEnv(Facts facts) { 28 | Map env = new HashMap(); 29 | for(String name: facts.getNames()) 30 | env.put(name, facts.get(name)); 31 | 32 | return env; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/figures/ExpandableExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.figures; 2 | 3 | import org.eclipse.draw2d.BorderLayout; 4 | import org.eclipse.draw2d.Figure; 5 | import org.eclipse.draw2d.IFigure; 6 | import org.eclipse.draw2d.Label; 7 | import org.eclipse.draw2d.PositionConstants; 8 | 9 | public class ExpandableExpressionFigure extends Figure { 10 | private Label jointFigure; 11 | 12 | private BorderLayout layout = new BorderLayout(); 13 | 14 | public ExpandableExpressionFigure() { 15 | setLayoutManager(layout); 16 | // this.setBorder(new MarginBorder(0, 2, 0, 2)); 17 | 18 | jointFigure = new Label(); 19 | add(jointFigure); 20 | layout.setConstraint(jointFigure, PositionConstants.CENTER); 21 | } 22 | 23 | public void setBaseFigure(IFigure baseFigure) { 24 | add(baseFigure); 25 | layout.setConstraint(baseFigure, PositionConstants.LEFT); 26 | } 27 | 28 | public void setJointText(String jointText) { 29 | jointFigure.setText(jointText); 30 | } 31 | 32 | public void setExpandedFigure(IFigure expandedFigure) { 33 | add(expandedFigure); 34 | layout.setConstraint(expandedFigure, PositionConstants.RIGHT); 35 | } 36 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/CreateNodeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.draw2d.geometry.Dimension; 4 | import org.eclipse.draw2d.geometry.Point; 5 | import org.eclipse.gef.commands.Command; 6 | 7 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 8 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 9 | 10 | public class CreateNodeCommand extends Command{ 11 | private DecisionTreeDiagram diagram; 12 | private DecisionTreeNode node; 13 | private Point location; 14 | 15 | public CreateNodeCommand( 16 | DecisionTreeDiagram diagram, 17 | DecisionTreeNode node, 18 | Point location){ 19 | this.diagram = diagram; 20 | this.node = node; 21 | this.location = location; 22 | } 23 | 24 | public void execute() { 25 | node.setLocation(location); 26 | node.setSize(new Dimension(diagram.getNodeWidth(), diagram.getNodeHeight())); 27 | diagram.addNode(node); 28 | } 29 | 30 | public String getLabel() { 31 | return "Create Node"; 32 | } 33 | 34 | public void redo() { 35 | execute(); 36 | } 37 | 38 | public void undo() { 39 | diagram.removeNode(node); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/UserDefinedContext.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision; 2 | 3 | public class UserDefinedContext implements Facts { 4 | private Facts constants; 5 | private Facts enums; 6 | public UserDefinedContext(Facts constants, Facts enums) { 7 | this.constants = constants; 8 | this.enums = enums; 9 | } 10 | 11 | @Override 12 | public String[] getNames() { 13 | return merge(constants, enums); 14 | } 15 | 16 | public static String[] merge(Facts fact1, Facts fact2) { 17 | String[] names1 = fact1.getNames(); 18 | String[] names2 = fact2.getNames(); 19 | String[] allNames = new String[names1.length + names2.length]; 20 | 21 | System.arraycopy(names1, 0, allNames, 0, names1.length); 22 | System.arraycopy(names2, 0, allNames, names1.length, names2.length); 23 | 24 | return allNames; 25 | } 26 | 27 | @Override 28 | public boolean contains(String name) { 29 | if(constants.contains(name)) 30 | return true; 31 | return enums.contains(name); 32 | } 33 | 34 | @Override 35 | public Object get(String name) { 36 | if(constants.contains(name)) 37 | return constants.get(name); 38 | return enums.get(name); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/PropertyConstants.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.editor.actions.DecisionTreeMessages; 4 | 5 | public interface PropertyConstants { 6 | String PROP_EXPRESSION = "Expression"; 7 | String PROP_DATA_TYPE = "Data type"; 8 | String PROP_CONDITION = "Condition"; 9 | 10 | String PROP_LABEL = "label"; 11 | String PROP_KEY_TYPE = "keyType"; 12 | String PROP_VALUE_TYPE = "valueType"; 13 | 14 | String PROP_FIELD_NAME = "Field name"; 15 | String PROP_FUNCTION_NAME = "Function name"; 16 | String PROP_DECISION = "Decision"; 17 | String PROP_DESCRIPTION = "description"; 18 | String PROP_IDENTIFIER = "identifier"; 19 | 20 | String PROP_NAME_TPL = "%s name"; 21 | String PROP_TYPE_TPL = "%s type"; 22 | String PROP_VALUE_TYPE_TPL = "%s value type"; 23 | String PROP_KEY_TYPE_TPL = "%s key type"; 24 | 25 | String PROP_VALUE = DecisionTreeMessages.CONSTANT_MSG + " value"; 26 | String PROP_ELEMENTS = "elements"; 27 | String PROP_INPUTS = "inputs"; 28 | String PROP_OUTPUTS = "outputs"; 29 | 30 | String PROP_SIZE = "size"; 31 | String PROP_LOCATION = "location"; 32 | String PROP_LAYOUT = "layout"; 33 | 34 | String FIELD_SEPARATOR = "."; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/menus/ConnectionContextMenuProvider.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.menus; 2 | 3 | import org.eclipse.jface.action.IMenuManager; 4 | 5 | import com.xrosstools.xdecision.editor.DecisionTreeDiagramEditor; 6 | import com.xrosstools.xdecision.editor.actions.CommandAction; 7 | import com.xrosstools.xdecision.editor.commands.expression.ChangeConditionOperatorCommand; 8 | import com.xrosstools.xdecision.editor.model.ConditionOperator; 9 | import com.xrosstools.xdecision.editor.model.DecisionTreeNodeConnection; 10 | import com.xrosstools.xdecision.editor.parts.DecisionTreeNodeConnectionPart; 11 | 12 | public class ConnectionContextMenuProvider { 13 | private DecisionTreeDiagramEditor editor; 14 | 15 | public ConnectionContextMenuProvider(DecisionTreeDiagramEditor editor) { 16 | this.editor = editor; 17 | } 18 | 19 | public void buildContextMenu(IMenuManager menu, DecisionTreeNodeConnectionPart connPart){ 20 | DecisionTreeNodeConnection conn = (DecisionTreeNodeConnection)connPart.getModel(); 21 | for(ConditionOperator oprValue: ConditionOperator.values()) 22 | menu.add(new CommandAction(editor, oprValue.getText(), conn.getOperator() == oprValue, new ChangeConditionOperatorCommand(conn, oprValue))); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/parts/expression/BasicExpressionPart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.parts.expression; 2 | 3 | import org.eclipse.draw2d.ColorConstants; 4 | import org.eclipse.draw2d.IFigure; 5 | import org.eclipse.gef.Request; 6 | import org.eclipse.gef.RequestConstants; 7 | 8 | import com.xrosstools.xdecision.editor.figures.BasicExpressionFigure; 9 | import com.xrosstools.xdecision.editor.model.expression.BasicExpression; 10 | import com.xrosstools.xdecision.editor.model.expression.PlaceholderExpression; 11 | 12 | public class BasicExpressionPart extends BaseExpressionPart { 13 | protected IFigure createFigure() { 14 | BasicExpressionFigure figure = new BasicExpressionFigure(); 15 | 16 | if(getModel() instanceof PlaceholderExpression) 17 | figure.setForegroundColor(ColorConstants.gray); 18 | 19 | return figure; 20 | } 21 | 22 | public void performRequest(Request req) { 23 | if (req.getType() == RequestConstants.REQ_OPEN){ 24 | } 25 | } 26 | 27 | protected void refreshVisuals() { 28 | BasicExpression node = (BasicExpression) getModel(); 29 | BasicExpressionFigure figure = (BasicExpressionFigure)getFigure(); 30 | figure.setText(node.getDisplayText()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/MethodExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | import com.xrosstools.xdecision.editor.model.definition.MethodDefinition; 4 | 5 | public class MethodExpression extends VariableExpression { 6 | private ParameterListExpression parameters; 7 | 8 | public MethodExpression(String name, ParameterListExpression parameters){ 9 | super(name); 10 | setParameters(parameters); 11 | } 12 | 13 | public MethodExpression(MethodDefinition definition){ 14 | super(definition); 15 | setParameters(new ParameterListExpression(definition.getParameters())); 16 | } 17 | 18 | public MethodExpression(ParameterListExpression parameters){ 19 | this("", parameters); 20 | } 21 | 22 | public void setParameters(ParameterListExpression newParameters) { 23 | this.parameters = newParameters; 24 | this.parameters.getListeners().addPropertyChangeListener(this); 25 | propertyChanged(); 26 | } 27 | 28 | public ParameterListExpression getParameters() { 29 | return parameters; 30 | } 31 | 32 | @Override 33 | public String getBaseString() { 34 | return getName() + "(" + parameters.toString() + ")"; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/figures/ExpandableExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.figures; 2 | 3 | import com.xrosstools.idea.gef.figures.BorderLayout; 4 | import com.xrosstools.idea.gef.figures.Figure; 5 | import com.xrosstools.idea.gef.figures.Label; 6 | import com.xrosstools.idea.gef.figures.PositionConstants; 7 | 8 | 9 | public class ExpandableExpressionFigure extends Figure { 10 | private Label jointFigure; 11 | 12 | private BorderLayout layout = new BorderLayout(); 13 | 14 | public ExpandableExpressionFigure() { 15 | setLayoutManager(layout); 16 | // this.setBorder(new MarginBorder(0, 2, 0, 2)); 17 | 18 | jointFigure = new Label(); 19 | add(jointFigure); 20 | layout.setConstraint(jointFigure, PositionConstants.CENTER); 21 | } 22 | 23 | public void setBaseFigure(Figure baseFigure) { 24 | add(baseFigure); 25 | layout.setConstraint(baseFigure, PositionConstants.LEFT); 26 | } 27 | 28 | public void setJointText(String jointText) { 29 | jointFigure.setText(jointText); 30 | } 31 | 32 | public void setExpandedFigure(Figure expandedFigure) { 33 | add(expandedFigure); 34 | layout.setConstraint(expandedFigure, PositionConstants.RIGHT); 35 | } 36 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/PropertyConstants.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.actions.DecisionTreeMessages; 4 | 5 | public interface PropertyConstants { 6 | String PROP_EXPRESSION = "Expression"; 7 | String PROP_DATA_TYPE = "Data type"; 8 | String PROP_CONDITION = "Condition"; 9 | 10 | String PROP_LABEL = "label"; 11 | String PROP_KEY_TYPE = "keyType"; 12 | String PROP_VALUE_TYPE = "valueType"; 13 | 14 | String PROP_FIELD_NAME = "Field name"; 15 | String PROP_FUNCTION_NAME = "Function name"; 16 | String PROP_DECISION = "Decision"; 17 | String PROP_DESCRIPTION = "Description"; 18 | String PROP_IDENTIFIER = "identifier"; 19 | 20 | String PROP_NAME_TPL = "%s name"; 21 | String PROP_TYPE_TPL = "%s type"; 22 | String PROP_VALUE_TYPE_TPL = "%s value type"; 23 | String PROP_KEY_TYPE_TPL = "%s key type"; 24 | 25 | String PROP_VALUE = DecisionTreeMessages.CONSTANT_MSG + " value"; 26 | String PROP_ELEMENTS = "elements"; 27 | String PROP_INPUTS = "inputs"; 28 | String PROP_OUTPUTS = "outputs"; 29 | 30 | String PROP_SIZE = "size"; 31 | String PROP_LOCATION = "location"; 32 | String PROP_LAYOUT = "layout"; 33 | 34 | String FIELD_SEPARATOR = "."; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/DecisionTreeNodeTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts; 2 | 3 | import com.xrosstools.idea.gef.parts.AbstractTreeEditPart; 4 | import com.xrosstools.xdecision.idea.editor.XdecisionsIcons; 5 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNode; 6 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNodeConnection; 7 | 8 | import javax.swing.*; 9 | import java.beans.PropertyChangeListener; 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | public class DecisionTreeNodeTreePart extends AbstractTreeEditPart implements PropertyChangeListener { 14 | public DecisionTreeNodeTreePart(Object model) { 15 | super(model); 16 | } 17 | 18 | public List getModelChildren() { 19 | DecisionTreeNode node = (DecisionTreeNode)getModel(); 20 | List chidren = new ArrayList(); 21 | for(DecisionTreeNodeConnection path : node.getOutputs()) 22 | chidren.add(path.getChild()); 23 | return chidren; 24 | } 25 | 26 | public String getText() { 27 | DecisionTreeNode node = (DecisionTreeNode)getModel(); 28 | return node.getOutlineText(); 29 | } 30 | 31 | @Override 32 | public Icon getImage() { 33 | return XdecisionsIcons.NODE; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/parts/DecisionTreeNodeCellEditorLocator.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.parts; 2 | 3 | import org.eclipse.draw2d.geometry.Rectangle; 4 | import org.eclipse.gef.tools.CellEditorLocator; 5 | import org.eclipse.jface.viewers.CellEditor; 6 | import org.eclipse.swt.SWT; 7 | import org.eclipse.swt.graphics.Point; 8 | import org.eclipse.swt.widgets.Text; 9 | 10 | import com.xrosstools.xdecision.editor.figures.DecisionTreeNodeFigure; 11 | 12 | public class DecisionTreeNodeCellEditorLocator implements CellEditorLocator { 13 | private DecisionTreeNodeFigure nodeFigure; 14 | 15 | /** 16 | * Creates a new ActivityCellEditorLocator for the given Label 17 | * @param nodeFigure the Label 18 | */ 19 | public DecisionTreeNodeCellEditorLocator(DecisionTreeNodeFigure nodeFigure) { 20 | this.nodeFigure = nodeFigure; 21 | } 22 | 23 | /** 24 | * @see CellEditorLocator#relocate(org.eclipse.jface.viewers.CellEditor) 25 | */ 26 | public void relocate(CellEditor celleditor) { 27 | Text text = (Text) celleditor.getControl(); 28 | Point pref = text.computeSize(SWT.DEFAULT, SWT.DEFAULT); 29 | Rectangle rect = nodeFigure.getTextBounds(); 30 | text.setBounds(rect.x - 1, rect.y - 1, pref.x + 1, pref.y + 1); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/resources/DecisionRule.xdecision: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.xrosstools.xdecision.ext.XrossEvaluator 6 | com.xrosstools.xdecision.ext.XrossEvaluator 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 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/definition/ListType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.definition; 2 | 3 | import static java.util.Arrays.asList; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 6 | 7 | public class ListType extends CollectionType { 8 | private MethodDefinition indexOf; 9 | private MethodDefinition lastIndexOf; 10 | private MethodDefinition get; 11 | 12 | public ListType(DecisionTreeDiagram diagram) { 13 | super(diagram, DataTypeEnum.LIST); 14 | 15 | add(indexOf = new MethodDefinition(diagram, "indexOf", DataType.NUMBER_TYPE, asList(new ParameterDefinition(diagram, VALUE, getValueType())))); 16 | add(lastIndexOf = new MethodDefinition(diagram, "lastIndexOf", DataType.NUMBER_TYPE, asList(new ParameterDefinition(diagram, VALUE, getValueType())))); 17 | add(get = new MethodDefinition(diagram, "get", getValueType(), asList(new ParameterDefinition(diagram, VALUE, DataType.NUMBER_TYPE)))); 18 | } 19 | 20 | @Override 21 | public void setValueType(DataType valueType) { 22 | indexOf.findParameterByName(VALUE).setType(valueType); 23 | lastIndexOf.findParameterByName(VALUE).setType(valueType); 24 | get.setType(valueType); 25 | 26 | super.setValueType(valueType); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/expression/MethodExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.expression; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.definition.MethodDefinition; 4 | 5 | public class MethodExpression extends VariableExpression { 6 | private ParameterListExpression parameters; 7 | 8 | public MethodExpression(String name, ParameterListExpression parameters){ 9 | super(name); 10 | setParameters(parameters); 11 | } 12 | 13 | public MethodExpression(MethodDefinition definition){ 14 | super(definition); 15 | setParameters(new ParameterListExpression(definition.getParameters())); 16 | } 17 | 18 | public MethodExpression(ParameterListExpression parameters){ 19 | this("", parameters); 20 | } 21 | 22 | public void setParameters(ParameterListExpression newParameters) { 23 | this.parameters = newParameters; 24 | this.parameters.getListeners().addPropertyChangeListener(this); 25 | propertyChanged(); 26 | } 27 | 28 | public ParameterListExpression getParameters() { 29 | return parameters; 30 | } 31 | 32 | @Override 33 | public String getBaseString() { 34 | return getName() + "(" + parameters.toString() + ")"; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/ReconnectParentCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNode; 5 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNodeConnection; 6 | 7 | public class ReconnectParentCommand extends Command { 8 | 9 | private DecisionTreeNodeConnection path; 10 | private DecisionTreeNode oldParent; 11 | private DecisionTreeNode newParent; 12 | 13 | public ReconnectParentCommand(DecisionTreeNodeConnection path, DecisionTreeNode newParent){ 14 | this.path = path; 15 | this.newParent = newParent; 16 | oldParent = path.getParent(); 17 | } 18 | 19 | public String getLabel() { 20 | return "Reconnect Parent"; 21 | } 22 | 23 | public boolean canExecute() { 24 | if (path.getChild().equals(newParent)) 25 | return false; 26 | 27 | if (path.getParent().equals(newParent)) 28 | return false; 29 | 30 | return true; 31 | } 32 | 33 | public void execute() { 34 | oldParent.removeOutput(path); 35 | path.setParent(newParent); 36 | newParent.addOutput(path); 37 | } 38 | 39 | public void undo() { 40 | newParent.removeOutput(path); 41 | path.setParent(oldParent); 42 | oldParent.addOutput(path); 43 | } 44 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/model/definition/ListType.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.model.definition; 2 | 3 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 4 | 5 | import static java.util.Arrays.asList; 6 | 7 | public class ListType extends CollectionType { 8 | private MethodDefinition indexOf; 9 | private MethodDefinition lastIndexOf; 10 | private MethodDefinition get; 11 | 12 | public ListType(DecisionTreeDiagram diagram) { 13 | super(diagram, DataTypeEnum.LIST); 14 | 15 | add(indexOf = new MethodDefinition(diagram, "indexOf", DataType.NUMBER_TYPE, asList(new ParameterDefinition(diagram, VALUE, getValueType())))); 16 | add(lastIndexOf = new MethodDefinition(diagram, "lastIndexOf", DataType.NUMBER_TYPE, asList(new ParameterDefinition(diagram, VALUE, getValueType())))); 17 | add(get = new MethodDefinition(diagram, "get", getValueType(), asList(new ParameterDefinition(diagram, VALUE, DataType.NUMBER_TYPE)))); 18 | } 19 | 20 | @Override 21 | public void setValueType(DataType valueType) { 22 | indexOf.findParameterByName(VALUE).setType(valueType); 23 | lastIndexOf.findParameterByName(VALUE).setType(valueType); 24 | get.setType(valueType); 25 | 26 | super.setValueType(valueType); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.xrosstools.xdecision 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.wst.common.project.facet.core.builder 10 | 11 | 12 | 13 | 14 | org.eclipse.jdt.core.javabuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.pde.ManifestBuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.pde.SchemaBuilder 25 | 26 | 27 | 28 | 29 | org.eclipse.m2e.core.maven2Builder 30 | 31 | 32 | 33 | 34 | org.sonarlint.eclipse.core.sonarlintBuilder 35 | 36 | 37 | 38 | 39 | 40 | org.eclipse.m2e.core.maven2Nature 41 | org.eclipse.jdt.core.javanature 42 | org.eclipse.pde.PluginNature 43 | org.eclipse.wst.common.project.facet.core.nature 44 | 45 | 46 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/CreatePathCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeNodeConnection; 7 | 8 | public class CreatePathCommand extends Command { 9 | private DecisionTreeNodeConnection path; 10 | private DecisionTreeNode parent; 11 | private DecisionTreeNode child; 12 | 13 | @Override 14 | public boolean canExecute() { 15 | if(child != null && child.getInput() != null) 16 | return false; 17 | 18 | if (parent.equals(child)) 19 | return false; 20 | 21 | for (DecisionTreeNodeConnection path : parent.getOutputs()) { 22 | if (path.getChild().equals(child)) 23 | return false; 24 | } 25 | return true; 26 | } 27 | 28 | public void execute() { 29 | path = new DecisionTreeNodeConnection(parent, child); 30 | } 31 | 32 | public void redo() { 33 | parent.addOutput(path); 34 | child.setInput(path); 35 | } 36 | 37 | public void setParent(DecisionTreeNode parent) { 38 | this.parent = parent; 39 | } 40 | 41 | public void setChild(DecisionTreeNode child) { 42 | this.child = child; 43 | } 44 | 45 | public void undo() { 46 | parent.removeOutput(path); 47 | child.setInput(null); 48 | } 49 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/treeparts/DecisionTreeDiagramTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.treeparts; 2 | 3 | import com.xrosstools.idea.gef.parts.AbstractTreeEditPart; 4 | import com.xrosstools.xdecision.idea.editor.XdecisionsIcons; 5 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 6 | 7 | import javax.swing.*; 8 | import java.beans.PropertyChangeListener; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | public class DecisionTreeDiagramTreePart extends AbstractTreeEditPart implements PropertyChangeListener { 13 | private DecisionTreeDiagram diagram; 14 | public DecisionTreeDiagramTreePart(Object model) { 15 | super(model); 16 | diagram = (DecisionTreeDiagram)model; 17 | } 18 | 19 | @Override 20 | public Icon getImage() { 21 | return XdecisionsIcons.TREE; 22 | } 23 | 24 | public List getModelChildren() { 25 | List children = new ArrayList(); 26 | children.addAll(diagram.getRoots()); 27 | children.add(diagram.getFactors()); 28 | children.add(diagram.getDecisions()); 29 | children.add(diagram.getUserDefinedTypes()); 30 | children.add(diagram.getUserDefinedEnums()); 31 | children.add(diagram.getUserDefinedConstants()); 32 | 33 | return children; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/policies/DecisionTreeDiagramLayoutPolicy.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.policies; 2 | 3 | import com.xrosstools.idea.gef.parts.AbstractGraphicalEditPart; 4 | import com.xrosstools.idea.gef.parts.EditPolicy; 5 | import com.xrosstools.idea.gef.commands.Command; 6 | import com.xrosstools.xdecision.idea.editor.commands.CreateNodeCommand; 7 | import com.xrosstools.xdecision.idea.editor.commands.MoveNodeCommand; 8 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 9 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNode; 10 | 11 | import java.awt.*; 12 | 13 | public class DecisionTreeDiagramLayoutPolicy extends EditPolicy { 14 | public Command getCreateCommand(Object newModel, Point location) { 15 | return new CreateNodeCommand( 16 | (DecisionTreeDiagram)getHost().getModel(), 17 | (DecisionTreeNode)newModel, 18 | location); 19 | } 20 | 21 | public Command getMoveCommand(AbstractGraphicalEditPart child, Rectangle constraint) { 22 | MoveNodeCommand cmd = new MoveNodeCommand(); 23 | if(!(child.getModel() instanceof DecisionTreeNode)) 24 | return null; 25 | 26 | cmd.setNode((DecisionTreeNode) child.getModel()); 27 | cmd.setConstraint(constraint); 28 | return cmd; 29 | } 30 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/MoveNodeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNode; 5 | 6 | import java.awt.*; 7 | 8 | public class MoveNodeCommand extends Command { 9 | private DecisionTreeNode node; 10 | 11 | private Rectangle oldConstraint; 12 | 13 | private Rectangle newConstraint; 14 | 15 | public void setConstraint(Rectangle c) { 16 | newConstraint = c; 17 | } 18 | 19 | public void setNode(DecisionTreeNode node) { 20 | this.node = node; 21 | } 22 | 23 | public void execute() { 24 | oldConstraint = new Rectangle(); 25 | oldConstraint.setLocation(node.getLocation()); 26 | oldConstraint.setSize(node.getSize()); 27 | node.setLocation(newConstraint.getLocation()); 28 | node.setSize(newConstraint.getSize()); 29 | } 30 | 31 | public String getLabel() { 32 | return "Move Node"; 33 | } 34 | 35 | public void redo() { 36 | node.setLocation(newConstraint.getLocation()); 37 | node.setSize(newConstraint.getSize()); 38 | } 39 | 40 | public void undo() { 41 | node.setLocation(oldConstraint.getLocation()); 42 | node.setSize(oldConstraint.getSize()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/actions/DecisionTreeCreateDecisionAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.actions; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | import org.eclipse.ui.IWorkbenchPart; 5 | 6 | import com.xrosstools.xdecision.editor.commands.ChangeDecisionCommand; 7 | import com.xrosstools.xdecision.editor.commands.definition.CreateElementCommand; 8 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 9 | 10 | public class DecisionTreeCreateDecisionAction extends BaseDialogAction 11 | implements DecisionTreeActionConstants, DecisionTreeMessages { 12 | private DecisionTreeNode node; 13 | 14 | public DecisionTreeCreateDecisionAction(IWorkbenchPart part, DecisionTreeNode node) { 15 | super(part, CREATE_NEW_DECISION_MSG, "Decision", "new decision"); 16 | this.node = node; 17 | } 18 | 19 | protected boolean calculateEnabled() { 20 | return true; 21 | } 22 | 23 | @Override 24 | protected Command createCommand(String value) { 25 | CommandChain cc = new CommandChain(); 26 | CreateElementCommand createCmd = new CreateElementCommand(node.getDecisionTreeManager().getDiagram(), node.getDecisionTreeManager().getDecisions()); 27 | createCmd.setInputText(value); 28 | cc.add(createCmd); 29 | cc.add(new ChangeDecisionCommand(node)); 30 | return cc; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/resources/object_validation.xdecision: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.xrosstools.xdecision.ext.XrossEvaluator 6 | com.xrosstools.xdecision.ext.XrossEvaluator 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 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/BetweenExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public class BetweenExpression extends SingleOperandExpression { 6 | public Expression lowerExp; 7 | public Expression upperExp; 8 | 9 | public BetweenExpression(Expression leftExp, String operator, Expression lowerExp, Expression upperExp) { 10 | super(leftExp, operator); 11 | this.lowerExp = lowerExp; 12 | this.upperExp = upperExp; 13 | } 14 | 15 | @Override 16 | public Boolean evaluate(Facts facts) { 17 | Object value = leftExp.evaluate(facts); 18 | Object lower = lowerExp.evaluate(facts); 19 | Object upper = upperExp.evaluate(facts); 20 | 21 | if(value == null || lower == null || upper == null) 22 | return false; 23 | 24 | switch (operator) { 25 | case BETWEEN: 26 | return compare(value, lower) >= 0 && compare(value, upper) <= 0; 27 | case NOT_BETWEEN: 28 | return compare(value, lower) < 0 || compare(value, upper) > 0; 29 | default: 30 | throw new IllegalArgumentException("Operator: " + operator + " is not supported!"); 31 | } 32 | } 33 | 34 | @Override 35 | public String getPath() { 36 | return String.format("%s, %s", String.valueOf(lowerExp), String.valueOf(upperExp)); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/definition/ChangeElementTypeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands.definition; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 6 | import com.xrosstools.xdecision.editor.model.definition.DataType; 7 | import com.xrosstools.xdecision.editor.model.definition.NamedType; 8 | 9 | public class ChangeElementTypeCommand extends Command{ 10 | private DecisionTreeDiagram diagram; 11 | private NamedType typeNameSupported; 12 | private String newTypeName; 13 | private DataType oldType; 14 | private DataType newType; 15 | 16 | public ChangeElementTypeCommand(DecisionTreeDiagram diagram, NamedType typeNameSupported, String newTypeName){ 17 | this.diagram = diagram; 18 | this.typeNameSupported = typeNameSupported; 19 | this.newTypeName = newTypeName; 20 | this.oldType = typeNameSupported.getType(); 21 | } 22 | 23 | public void execute() { 24 | newType = diagram.findDataType(newTypeName); 25 | redo(); 26 | } 27 | 28 | public String getLabel() { 29 | return "Change Data Type"; 30 | } 31 | 32 | public void redo() { 33 | typeNameSupported.setType(newType); 34 | } 35 | 36 | public void undo() { 37 | typeNameSupported.setType(oldType); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/ReconnectChildCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeNodeConnection; 7 | 8 | public class ReconnectChildCommand extends Command { 9 | 10 | private DecisionTreeNodeConnection path; 11 | private DecisionTreeNode oldChild; 12 | private DecisionTreeNode newChild; 13 | 14 | public ReconnectChildCommand(DecisionTreeNodeConnection path, DecisionTreeNode newChild){ 15 | this.path = path; 16 | this.newChild = newChild; 17 | oldChild = path.getChild(); 18 | } 19 | 20 | public boolean canExecute() { 21 | if(newChild.getInput() != null) 22 | return false; 23 | 24 | if (path.getChild().equals(newChild)) 25 | return false; 26 | 27 | DecisionTreeNode next = path.getParent(); 28 | while(next != null){ 29 | if (next.equals(newChild)) 30 | return false; 31 | 32 | next = next.getInput() == null ? null : next.getInput().getParent(); 33 | } 34 | 35 | return true; 36 | } 37 | 38 | public void execute() { 39 | oldChild.setInput(null); 40 | path.setChild(newChild); 41 | newChild.setInput(path); 42 | } 43 | 44 | public void undo() { 45 | newChild.setInput(null); 46 | path.setChild(oldChild); 47 | oldChild.setInput(path); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/treeparts/definition/NamedElementTreePart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.treeparts.definition; 2 | 3 | import java.beans.PropertyChangeEvent; 4 | import java.beans.PropertyChangeListener; 5 | 6 | import org.eclipse.gef.editparts.AbstractTreeEditPart; 7 | import org.eclipse.swt.graphics.Image; 8 | 9 | import com.xrosstools.xdecision.editor.Activator; 10 | import com.xrosstools.xdecision.editor.model.definition.NamedElement; 11 | 12 | public class NamedElementTreePart extends AbstractTreeEditPart implements PropertyChangeListener { 13 | private NamedElement element; 14 | public NamedElementTreePart(Object model) { 15 | super(model); 16 | this.element = (NamedElement)model; 17 | } 18 | 19 | protected String getText() { 20 | return element.toString(); 21 | } 22 | 23 | protected Image getImage() { 24 | return Activator.getDefault().getImage(com.xrosstools.xdecision.editor.Activator.TREE); 25 | } 26 | 27 | public void activate() { 28 | super.activate(); 29 | element.getListeners().addPropertyChangeListener(this); 30 | } 31 | 32 | public void deactivate() { 33 | super.deactivate(); 34 | element.getListeners().removePropertyChangeListener(this); 35 | } 36 | 37 | @Override 38 | public void propertyChange(PropertyChangeEvent evt) { 39 | refresh(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/commands/ChangeDecisionCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.commands; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | 5 | import com.xrosstools.xdecision.editor.model.DecisionTreeDecision; 6 | import com.xrosstools.xdecision.editor.model.DecisionTreeNode; 7 | 8 | public class ChangeDecisionCommand extends Command{ 9 | private boolean useLastCreated; 10 | private DecisionTreeNode node; 11 | private DecisionTreeDecision oldDecision; 12 | private DecisionTreeDecision newDecision; 13 | 14 | public ChangeDecisionCommand(DecisionTreeNode node){ 15 | this(node, null); 16 | useLastCreated = true; 17 | } 18 | 19 | public ChangeDecisionCommand(DecisionTreeNode node, DecisionTreeDecision decision){ 20 | this.node = node; 21 | oldDecision = node.getDecision(); 22 | this.newDecision = decision; 23 | } 24 | 25 | public void execute() { 26 | if(useLastCreated) 27 | newDecision = node.getDecisionTreeManager().getDecisions().get(node.getDecisionTreeManager().getDecisions().size() -1); 28 | redo(); 29 | } 30 | 31 | public String getLabel() { 32 | return "Change decision id"; 33 | } 34 | 35 | public void redo() { 36 | node.setDecision(newDecision); 37 | } 38 | 39 | public void undo() { 40 | node.setDecision(oldDecision); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/definition/ChangeElementTypeCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands.definition; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.DataType; 6 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedType; 7 | 8 | public class ChangeElementTypeCommand extends Command { 9 | private DecisionTreeDiagram diagram; 10 | private NamedType typeNameSupported; 11 | private String newTypeName; 12 | private DataType oldType; 13 | private DataType newType; 14 | 15 | public ChangeElementTypeCommand(DecisionTreeDiagram diagram, NamedType typeNameSupported, String newTypeName){ 16 | this.diagram = diagram; 17 | this.typeNameSupported = typeNameSupported; 18 | this.newTypeName = newTypeName; 19 | this.oldType = typeNameSupported.getType(); 20 | } 21 | 22 | public void execute() { 23 | newType = diagram.findDataType(newTypeName); 24 | redo(); 25 | } 26 | 27 | public String getLabel() { 28 | return "Change Data Type"; 29 | } 30 | 31 | public void redo() { 32 | typeNameSupported.setType(newType); 33 | } 34 | 35 | public void undo() { 36 | typeNameSupported.setType(oldType); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/TokenParser.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class TokenParser { 7 | public List parseToken(String expressionStr) { 8 | List tokens = new ArrayList<>(); 9 | 10 | int pos = 0; 11 | char[] chars = expressionStr.toCharArray(); 12 | 13 | while(pos < chars.length) { 14 | char next = chars[pos]; 15 | 16 | //Filter blank 17 | if(next == ' ') { 18 | pos++; 19 | continue; 20 | } 21 | 22 | StringBuilder buf = new StringBuilder(String.valueOf(next)); 23 | for(TokenType type: TokenType.values()) { 24 | if(!type.matchStart(next)) 25 | continue; 26 | 27 | pos++; 28 | while(pos < chars.length) { 29 | next = chars[pos]; 30 | if(type.matchBody(buf, next)) { 31 | pos++; 32 | buf.append(next); 33 | } else 34 | break; 35 | } 36 | 37 | tokens.add(type.parse(buf)); 38 | break; 39 | } 40 | 41 | } 42 | 43 | return tokens; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/actions/DecisionTreeLayoutAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.actions; 2 | 3 | import org.eclipse.gef.commands.Command; 4 | import org.eclipse.gef.ui.actions.WorkbenchPartAction; 5 | import org.eclipse.ui.IWorkbenchPart; 6 | 7 | import com.xrosstools.xdecision.editor.DecisionTreeDiagramEditor; 8 | import com.xrosstools.xdecision.editor.model.DecisionTreeDiagram; 9 | import com.xrosstools.xdecision.editor.requests.DecisionTreeLayoutRequest; 10 | 11 | public class DecisionTreeLayoutAction extends WorkbenchPartAction implements DecisionTreeActionConstants { 12 | private boolean horizantal; 13 | private float alignment; 14 | 15 | public DecisionTreeLayoutAction(IWorkbenchPart part, String id, boolean horizantal, float alignment){ 16 | super(part); 17 | setId(ID_PREFIX + id); 18 | this.alignment = alignment; 19 | this.horizantal = horizantal; 20 | } 21 | 22 | protected boolean calculateEnabled() { 23 | return true; 24 | } 25 | 26 | private Command createAlignmentCommand() { 27 | DecisionTreeDiagramEditor editor = (DecisionTreeDiagramEditor)getWorkbenchPart(); 28 | DecisionTreeLayoutRequest request = new DecisionTreeLayoutRequest((DecisionTreeDiagram)editor.getRootEditPart().getContents().getModel(), horizantal, alignment); 29 | return editor.getRootEditPart().getContents().getCommand(request); 30 | } 31 | 32 | public void run() { 33 | execute(createAlignmentCommand()); 34 | } 35 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/figures/MethodExpressionFigure.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.figures; 2 | 3 | import com.xrosstools.idea.gef.figures.*; 4 | 5 | public class MethodExpressionFigure extends Figure { 6 | private Label nameLabel; 7 | private EnclosedExpressionFigure paramPanel; 8 | private BorderLayout layout = new BorderLayout(); 9 | 10 | public MethodExpressionFigure() { 11 | setLayoutManager(layout); 12 | nameLabel = new Label(); 13 | add(nameLabel); 14 | layout.setConstraint(nameLabel, PositionConstants.LEFT); 15 | paramPanel = EnclosedExpressionFigure.createBracketFigure(); 16 | add(paramPanel); 17 | layout.setConstraint(paramPanel, PositionConstants.CENTER); 18 | // this.setBorder(new MarginBorder(0, 2, 0, 2)); 19 | } 20 | 21 | public void setMethodName(String name) { 22 | nameLabel.setText(name); 23 | } 24 | 25 | public void setParameterFigure(Figure parameterFigure) { 26 | paramPanel.setEnclosedFigure(parameterFigure); 27 | } 28 | 29 | public void setMethodValidation(boolean valid) { 30 | nameLabel.setForegroundColor(valid ? ElementColors.TEXT_NORMAL: ElementColors.TEXT_ERROR); 31 | } 32 | 33 | public void setExpandedFigure(Figure expandedFigure) { 34 | add(expandedFigure); 35 | layout.setConstraint(expandedFigure, PositionConstants.RIGHT); 36 | } 37 | } -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/actions/ImportDataTypeAction.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.actions; 2 | 3 | import com.intellij.ide.util.TreeClassChooser; 4 | import com.intellij.ide.util.TreeClassChooserFactory; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.psi.PsiClass; 7 | import com.xrosstools.idea.gef.actions.Action; 8 | import com.xrosstools.idea.gef.commands.Command; 9 | import com.xrosstools.xdecision.idea.editor.commands.definition.CreateUserDefineidTypeCommand; 10 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 11 | 12 | public class ImportDataTypeAction extends Action implements DecisionTreeActionConstants, DecisionTreeMessages{ 13 | private Project project; 14 | private DecisionTreeDiagram diagram; 15 | 16 | public ImportDataTypeAction(Project project) { 17 | setText(IMPORT_NEW_TEMPLATE_MSG); 18 | this.project = project; 19 | } 20 | 21 | public void setDiagram(DecisionTreeDiagram diagram) { 22 | this.diagram = diagram; 23 | } 24 | 25 | @Override 26 | public Command createCommand() { 27 | TreeClassChooser chooser = TreeClassChooserFactory.getInstance(project).createAllProjectScopeChooser(""); 28 | chooser.showDialog(); 29 | PsiClass selected = chooser.getSelected(); 30 | if(selected == null) 31 | return null; 32 | 33 | return new CreateUserDefineidTypeCommand(diagram,selected); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/ChangeDecisionCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands; 2 | 3 | import com.xrosstools.idea.gef.commands.Command; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDecision; 5 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeNode; 6 | 7 | public class ChangeDecisionCommand extends Command { 8 | private boolean useLastCreated; 9 | private DecisionTreeNode node; 10 | private DecisionTreeDecision oldDecision; 11 | private DecisionTreeDecision newDecision; 12 | 13 | public ChangeDecisionCommand(DecisionTreeNode node){ 14 | this(node, null); 15 | useLastCreated = true; 16 | } 17 | 18 | public ChangeDecisionCommand(DecisionTreeNode node, DecisionTreeDecision decision){ 19 | this.node = node; 20 | oldDecision = node.getDecision(); 21 | this.newDecision = decision; 22 | } 23 | 24 | public void execute() { 25 | if(useLastCreated) 26 | newDecision = node.getDecisionTreeManager().getDecisions().get(node.getDecisionTreeManager().getDecisions().size() -1); 27 | redo(); 28 | } 29 | 30 | public String getLabel() { 31 | return "Change decision id"; 32 | } 33 | 34 | public void redo() { 35 | node.setDecision(newDecision); 36 | } 37 | 38 | public void undo() { 39 | node.setDecision(oldDecision); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/model/expression/VariableExpression.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.model.expression; 2 | 3 | import com.xrosstools.xdecision.editor.model.definition.NamedElement; 4 | 5 | public class VariableExpression extends ExtensibleExpression { 6 | private String name; 7 | private NamedElement referenceElement; 8 | 9 | public VariableExpression(String name) { 10 | setName(name); 11 | } 12 | 13 | public VariableExpression(NamedElement referenceElement) { 14 | setReferenceElement(referenceElement); 15 | } 16 | 17 | public String getName() { 18 | return referenceElement == null ? name : referenceElement.getName(); 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | propertyChanged(); 24 | } 25 | 26 | public boolean isValid() { 27 | return referenceElement != null; 28 | } 29 | 30 | public NamedElement getReferenceElement() { 31 | return referenceElement; 32 | } 33 | 34 | public void setReferenceElement(NamedElement newReferenceElement) { 35 | this.referenceElement = newReferenceElement; 36 | if(referenceElement != null) 37 | this.referenceElement.getListeners().addPropertyChangeListener(this); 38 | propertyChanged(); 39 | } 40 | 41 | @Override 42 | public String getBaseString() { 43 | return getName(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.editor/src/com/xrosstools/xdecision/editor/parts/expression/BaseExpressionPart.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.editor.parts.expression; 2 | 3 | import java.beans.PropertyChangeEvent; 4 | import java.beans.PropertyChangeListener; 5 | 6 | import org.eclipse.gef.Request; 7 | import org.eclipse.gef.RequestConstants; 8 | import org.eclipse.gef.editparts.AbstractGraphicalEditPart; 9 | 10 | import com.xrosstools.xdecision.editor.model.expression.ExpressionDefinition; 11 | 12 | public abstract class BaseExpressionPart extends AbstractGraphicalEditPart implements PropertyChangeListener { 13 | public void performRequest(Request req) { 14 | if (req.getType() == RequestConstants.REQ_OPEN){ 15 | } 16 | } 17 | 18 | protected void createEditPolicies() { 19 | // installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new DecisionTreeNodeDirectEditPolicy(getDiagram().getFactors())); 20 | // installEditPolicy(EditPolicy.COMPONENT_ROLE, new DecisionTreeNodeEditPolicy()); 21 | } 22 | 23 | public void propertyChange(PropertyChangeEvent evt) { 24 | refresh(); 25 | } 26 | 27 | public void activate() { 28 | super.activate(); 29 | ((ExpressionDefinition) getModel()).getListeners().addPropertyChangeListener(this); 30 | } 31 | 32 | public void deactivate() { 33 | super.deactivate(); 34 | ((ExpressionDefinition) getModel()).getListeners().removePropertyChangeListener(this); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/DecisionTreeEditorProvider.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor; 2 | 3 | import com.intellij.openapi.fileEditor.FileEditorPolicy; 4 | import com.intellij.openapi.fileTypes.FileType; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.openapi.vfs.VirtualFile; 7 | import com.xrosstools.idea.gef.AbstractDiagramEditorProvider; 8 | import com.xrosstools.idea.gef.PanelContentProvider; 9 | import org.jetbrains.annotations.NotNull; 10 | 11 | public class DecisionTreeEditorProvider extends AbstractDiagramEditorProvider { 12 | public static final String TREE = "tree"; 13 | public static final String NODE = "node"; 14 | public static final String CONNECTION = "connection"; 15 | 16 | @Override 17 | public FileType getFileType() { 18 | return XdecisionFileType.INSTANCE; 19 | } 20 | 21 | @Override 22 | public String getExtention() { 23 | return XdecisionFileType.EXTENSION; 24 | } 25 | 26 | @NotNull 27 | @Override 28 | public String getEditorTypeId() { 29 | return "Xross Decision Tree Edtitor"; 30 | } 31 | 32 | @Override 33 | public PanelContentProvider createPanelContentProvider(@NotNull Project project, @NotNull VirtualFile virtualFile) { 34 | return new DecisionTreePanelContentProvider(project, virtualFile); 35 | } 36 | 37 | @NotNull 38 | @Override 39 | public FileEditorPolicy getPolicy() { 40 | return FileEditorPolicy.HIDE_DEFAULT_EDITOR; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.sample/src/main/resources/range_validation.xdecision: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.xrosstools.xdecision.ext.XrossEvaluator 6 | com.xrosstools.xdecision.ext.XrossEvaluator 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 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision/src/com/xrosstools/xdecision/ext/RawValue.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.ext; 2 | 3 | import com.xrosstools.xdecision.Facts; 4 | 5 | public class RawValue implements Expression { 6 | public static final RawValue NULL_OBJ = new RawValue(null); 7 | 8 | private Object value; 9 | 10 | public static RawValue numberOf(CharSequence value) { 11 | return new RawValue(parseNumber(value)); 12 | } 13 | 14 | public static Number parseNumber(CharSequence value) { 15 | boolean isDouble = false; 16 | for(int i = 0; i < value.length(); i++) { 17 | if(value.charAt(i) == '.') 18 | isDouble = true; 19 | } 20 | 21 | if(isDouble) 22 | return new Double(value.toString()); 23 | else 24 | return new Integer(value.toString()); 25 | } 26 | 27 | public static RawValue stringOf(CharSequence value) { 28 | return new RawValue(value.toString()); 29 | } 30 | 31 | public static RawValue tokenOf(Token token) { 32 | return token.getType() == TokenType.STRING ? stringOf(token.getValueStr()) : numberOf(token.getValueStr()); 33 | } 34 | 35 | public RawValue(Object value) { 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Object evaluate(Facts facts) { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return String.valueOf(value); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /com.xrosstools.xdecision.idea.editor/src/com/xrosstools/xdecision/idea/editor/commands/definition/ChangeElementNameCommand.java: -------------------------------------------------------------------------------- 1 | package com.xrosstools.xdecision.idea.editor.commands.definition; 2 | 3 | import com.xrosstools.idea.gef.commands.InputTextCommand; 4 | import com.xrosstools.xdecision.idea.editor.model.DecisionTreeDiagram; 5 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElement; 6 | import com.xrosstools.xdecision.idea.editor.model.definition.NamedElementContainer; 7 | 8 | public class ChangeElementNameCommand extends InputTextCommand { 9 | private DecisionTreeDiagram diagram; 10 | private NamedElementContainer container; 11 | private NamedElement nameType; 12 | private String oldName; 13 | private String newName; 14 | 15 | public ChangeElementNameCommand(DecisionTreeDiagram diagram, NamedElementContainer container, NamedElement field){ 16 | this.diagram = diagram; 17 | this.container = container; 18 | this.nameType = field; 19 | oldName = field.getName(); 20 | } 21 | 22 | public boolean canExecute() { 23 | return !CreateElementCommand.contains(diagram, container, getInputText()); 24 | } 25 | 26 | public void execute() { 27 | redo(); 28 | } 29 | 30 | public String getLabel() { 31 | return "Change name"; 32 | } 33 | 34 | public void redo() { 35 | nameType.setName(getInputText()); 36 | } 37 | 38 | public void undo() { 39 | nameType.setName(oldName); 40 | } 41 | } --------------------------------------------------------------------------------