Differences

This shows you the differences between two versions of the page.

Link to this comparison view

research:software:reflex:interaction_rules [2009/03/26 21:45] – created etanterresearch:software:reflex:interaction_rules [2009/03/26 21:47] (current) etanter
Line 1: Line 1:
 +==== Interaction Rules ====
  
 +Below are the logic rules used to detect structural interactions in Reflex.
 +These interaction rules take into account ordering and visibility between links.
 +
 +<code>
 +       ordered(A,B,'interactionEnabled') :- ord(B,'all'), not(ord(A,'all')). 
 +             ordered(A,B,'interactionDisabled') :- ord(A,'all'), not(ord(B,'all')). 
 +             ordered(A,B,'interactionDisabled') :- ord(A,B). 
 +             ordered(A,B,'interactionEnabled') :- ord(B,A). 
 +             ordered(A,B,'notOrdered') :-  
 +                  not(ord(B,A)),  
 +                  not(ord(A,B)),  
 +                  not(ord(B,'all')),  
 +                  not(ord(A,'all')).
 +        
 +        remove(Link,Class,true) :- remove(Link,Class). 
 +             remove(Link,Class,false) :- not(remove(Link,Class)).
 +        
 +        visible(Link1,Link2,true) :- visible(Link1,Link2). 
 +             visible(Link1,Link2,false) :- not(visible(Link1,Link2)).
 +        
 +
 +        interactFieldName(Link1,Link2,Class1,Class2,FieldName,View,Order,Mutex) 
 +           :- readFieldName(Link1,Class2), 
 +              addField(Link2,Class1,Class2,_,_,FieldName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactMethodName(Link1,Link2,Class1,Class2,MethodName,View,Order,Mutex) 
 +           :- readMethodName(Link1,Class2), 
 +              addMethod(Link2,Class1,Class2,_,_,MethodName,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactClassName(Link1,Link2,Class1,Class2,View,Order,Mutex) 
 +           :- readClassName(Link1,Class2), 
 +              addClass(Link2,Class1,Class2,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link2,Class2,Mutex).
 +        
 +        interactInterfaceName(Link1,Link2,Class1,Class2,InterfaceName,View,Order,Mutex) 
 +           :- readClassInterfaceName(Link1,Class2), 
 +              addInterface(Link2,Class1,Class2,InterfaceName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +
 +        
 +        interactAnnotField(Link1,Link2,Class1,Class2,Field,AnnotationName,View,Order,Mutex) 
 +           :- readFieldAnnotationName(Link1,Class2,Field), 
 +              addAnnotationToField(Link2,Class1,Class2,Field,AnnotationName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex). 
 +        
 +        interactAnnotMethod(Link1,Link2,Class1,Class2,Method,AnnotationName,View,Order,Mutex) 
 +           :- readMethodAnnotationName(Link1,Class2,Method), 
 +              addAnnotationToMethod(Link2,Class1,Class2,Method,AnnotationName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactAnnotConstructor(Link1,Link2,Class1,Class2,Constructor,AnnotationName,View,Order,Mutex) 
 +           :- readConstructorAnnotationName(Link1,Class2,Constructor), 
 +              addAnnotationToConstructor(Link2,Class1,Class2,Constructor,AnnotationName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex). 
 +        
 +        interactAnnotClass(Link1,Link2,Class1,Class2,AnnotationName,View,Order,Mutex) 
 +           :- readClassAnnotationName(Link1,Class2), 
 +              addAnnotationToClass(Link2,Class1,Class2,AnnotationName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactAnnotInterface(Link1,Link2,Class1,Interface,AnnotationName,View,Order,Mutex) 
 +           :- readInterfaceAnnotationName(Link1,Interface), 
 +              addAnnotationToInterface(Link2,Class1,Interface,AnnotationName), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierField(Link1,Link2,Class1,Class2,Field,Modifier,View,Order,Mutex) 
 +           :- readFieldModifier(Link1,Class2,_), 
 +              addField(Link2,Class1,Class2,Modifier,_,Field), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierField(Link1,Link2,Class1,Class2,Field,Modifier,View,Order,Mutex) 
 +           :- readFieldModifier(Link1,Class2,Field), 
 +              setModifierField(Link2,Class1,Class2,Field,Modifier), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierMethod(Link1,Link2,Class1,Class2,Method,Modifier,View,Order,Mutex) 
 +           :- readMethodModifier(Link1,Class2,_), 
 +              addMethod(Link2,Class1,Class2,Modifier,_,Method,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierMethod(Link1,Link2,Class1,Class2,Method,Modifier,View,Order,Mutex) 
 +           :- readMethodModifier(Link1,Class2,Method), 
 +              setModifierMethod(Link2,Class1,Class2,Method,Modifier), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierConstructor(Link1,Link2,Class1,Class2,Constructor,Modifier,View,Order,Mutex) 
 +           :- readConstructorModifier(Link1,Class2,_), 
 +              addConstructor(Link2,Class1,Class2,Modifier,Constructor,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierConstructor(Link1,Link2,Class1,Class2,Constructor,Modifier,View,Order,Mutex) 
 +           :- readConstructorModifier(Link1,Class2,Constructor), 
 +              setModifierConstructor(Link2,Class1,Class2,Constructor,Modifier), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierClass(Link1,Link2,Class1,Class2,Modifier,View,Order,Mutex) 
 +           :- readClassModifier(Link1,Class2), 
 +              addClass(Aspect,Class1,Class2,Modifier), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactModifierClass(Link1,Link2,Class1,Class2,Modifier,View,Order,Mutex) 
 +           :- readClassModifier(Link1,Class2), 
 +              setModifierClass(Link2,Class1,Class2,Modifier), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactFieldType(Link1,Link2,Class1,Class2,Field,Type,View,Order,Mutex) 
 +           :- readFieldType(Link1,Class2), 
 +              addField(Link2,Class1,Class2,_,Type,Field), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactReturnType(Link1,Link2,Class1,Class2,Method,ReturnType,View,Order,Mutex) 
 +           :- readMethodReturn(Link1,Class2), 
 +              addMethod(Link2,Class1,Class2,_,ReturnType,Method,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactMethodParamTypes(Link1,Link2,Class1,Class2,Method,ParamTypes,View,Order,Mutex) 
 +           :- readMethodParameterTypes(Link1,Class2), 
 +              addMethod(Link2,Class1,Class2,_,_,Method,ParamTypes,_), 
 +              ParamTypes \\= [], 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactConstructorParamTypes(Link1,Link2,Class1,Class2,Const,ParamTypes,View,Order,Mutex) 
 +           :- readConstructorParameterTypes(Link1,Class2), 
 +              addConstructor(Link2,Class1,Class2,_,Const,ParamTypes,_), 
 +              ParamTypes \\= [], 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactMethodExceptionTypes(Link1,Link2,Class1,Class2,Method,ExceptionTypes,View,Order,Mutex) 
 +           :- readMethodExceptionTypes(Link1,Class2), 
 +              addMethod(Link2,Class1,Class2,_,_,Method,_,ExceptionsTypes), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactConstructorExceptionTypes(Link1,Link2,Class1,Class2,Const,ExceptionTypes,View,Order,Mutex) 
 +           :- readConstructorExceptionTypes(Link1,Class2), 
 +              addConstructor(Link2,Class1,Class2,_,Const,_,ExceptionsTypes), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex). 
 +        
 +        interactClassFields(Link1,Link2,Class1,Class2,View,Order,Mutex) 
 +           :- readFields(Link1,Class2), 
 +              addField(Link2,Class1,Class2,_,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactClassMethods(Link1,Link2,Class1,Class2,View,Order,Mutex) 
 +           :- readMethods(Link1,Class2), 
 +              addMethod(Link2,Class1,Class2,_,_,_,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex). 
 +        
 +        interactClassConstructors(Link1,Link2,Class1,Class2,View,Order,Mutex) 
 +           :- readConstructors(Link1,Class2), 
 +              addConstructor(Link2,Class1,Class2,_,_,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactClassInterfaces(Link1,Link2,Class1,Class2,View,Order,Mutex) 
 +           :- readClassInterfaces(Link1,Class2), 
 +              addInterface(Link2,Class1,Class2,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactFieldAnnotations(Link1,Link2,Class1,Class2,Field,View,Order,Mutex) 
 +           :- readFieldAnnotations(Link1,Class2), 
 +              addAnnotationToField(Link2,Class1,Class2,Field,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactMethodAnnotations(Link1,Link2,Class1,Class2,Method,View,Order,Mutex) 
 +           :- readMethodAnnotations(Link1,Class2), 
 +              addAnnotationToMethod(Link2,Class1,Class2,Method,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactConstructorAnnotations(Link1,Link2,Class1,Class2,Const,View,Order,Mutex) 
 +           :- readConstructorAnnotations(Link1,Class2), 
 +              addAnnotationToConstructor(Link2,Class1,Class2,Const,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactInterfaceAnnotations(Link1,Link2,Class1,Interface,View,Order,Mutex) 
 +           :- readInterfaceAnnotations(Link1,Interface), 
 +              addAnnotationToInterface(Link2,Class1,Interface,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactClassAnnotations(Link1,Link2,Class1,Class2,View,Order,Mutex) 
 +           :- readClassAnnotations(Link1,Class2), 
 +              addAnnotationToClass(Link2,Class1,Class2,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex). 
 +        
 +        interactFieldBody(Link1,Link2,Class1,Class2,Field,View,Order,Mutex) 
 +           :- readFieldBody(Link1,Class2), 
 +              addField(Link2,Class1,Class2,_,_,Field), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).  
 +        
 +        interactMethodBody(Link1,Link2,Class1,Class2,Method,View,Order,Mutex) 
 +           :- readMethodBody(Link1,Class2), 
 +              addMethod(Link2,Class1,Class2,_,_,Method,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +        
 +        interactConstructorBody(Link1,Link2,Class1,Class2,Const,View,Order,Mutex) 
 +           :- readConstructorBody(Link1,Class2), 
 +              addConstructor(Link2,Class1,Class2,_,Const,_,_), 
 +              visible(Link2,Link1,View), 
 +              ordered(Link1,Link2,Order),
 +              remove(Link1,Class2,Mutex).
 +</code>