Index: varda_model.pl =================================================================== RCS file: /mnt/cvs/cvs-hades/varda/varda_model.pl,v retrieving revision 1.12 diff -u -r1.12 varda_model.pl --- varda_model.pl 23 May 2008 19:57:45 -0000 1.12 +++ varda_model.pl 19 Mar 2009 10:40:39 -0000 @@ -8,7 +8,7 @@ % % Copyright (C) 2006-9 by the HeKatE Project % -% VARDA has been develped by the HeKatE Project, +% VARDA has been develped by the HeKatE Project, % see http://hekate.ia.agh.edu.pl % % This file is part of VARDA. @@ -75,18 +75,22 @@ \+ ard_property_find(Attribute,_), retract(ard_att(Attribute)). -ard_property_add(PropertyContents) :- +ard_property_add(PropertyContentsUnprepared) :- + sort(PropertyContentsUnprepared,PropertyContents), \+ ard_property(PropertyContents), ard_att_list_verify(PropertyContents), assert(ard_property(PropertyContents)). -ard_property_del(PropertyContents) :- +ard_property_del(PropertyContentsUnprepared) :- + sort(PropertyContentsUnprepared,PropertyContents), \+ ard_depend_find(PropertyContents), retract(ard_property(PropertyContents)). % FIXME: maybe we could consider removing orphan attributes, not used in any propertys? % not really, if we do refactoring - GJN -ard_depend_add(ToProperty,FromProperty) :- +ard_depend_add(ToPropertyUnprepared,FromPropertyUnprepared) :- + sort(ToPropertyUnprepared,ToProperty), + sort(FromPropertyUnprepared,FromProperty), \+ ard_depend(ToProperty,FromProperty), ard_property(ToProperty), ard_property(FromProperty), @@ -94,7 +98,7 @@ ard_depend_del(ToProperty,FromProperty) :- ard_depend(ToProperty,FromProperty), - retract(ard_depend(ToProperty,FromProperty)). + retract(ard_depend(ToProperty,FromProperty)). % FIXME: maybe we could consider removing orphan attributes, not used in any propertys? % not really, if we do refactoring - GJN @@ -106,17 +110,18 @@ % @param List of propertys (identified by attribute names), containing the attribute % @author Grzegorz J. Nalepa %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -ard_property_find(Attribute, [Attribute]) :- - ard_property([Attribute|_]). -ard_property_find(Attribute, [X|AttributeList]) :- - ard_property(X), - member(Attribute,AttributeList). +% if Property is out parameter, then no sorting is needed, otherwise, there is problem generating properties - nivertius + +ard_property_find(Attribute, Property) :- + ard_property(Property), + member(Attribute,Property). %% ard_attlist_verify(+AttributeList) is det. % % True if all of the attribtes in the list exist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % FIXME, should verify a set, not list!!! +% it doesn't matter here - nivertius ard_att_list_verify([SingleAttribute]) :- ard_att(SingleAttribute). ard_att_list_verify([First|ListOfAttributes]) :- @@ -126,15 +131,17 @@ ard_att_list_verify(A) :- atom(A), % write('ERROR: ard_att_list_verify"'), write(A), write('" is an atom, should be a list!'),nl, -% it waz my idea and it makes me sick with hic! --GJN +% it waz my idea and it makes me sick with hic! --GJN fail. % FIXME: see exceptions % FIXME -ard_depend_find(PropertyContents) :- +ard_depend_find(PropertyContentsUnprepared) :- + sort(PropertyContentsUnprepared,PropertyContents), ard_depend(PropertyContents,_). -ard_depend_find(PropertyContents) :- +ard_depend_find(PropertyContentsUnprepared) :- + sort(PropertyContentsUnprepared,PropertyContents), ard_depend(_,PropertyContents). % misc utilities @@ -147,30 +154,31 @@ ard_depend_addto(NewProperty,[ToDepend]) :- ard_depend_add(ToDepend,NewProperty). ard_depend_addto(NewProperty,[First|Depends]) :- - ard_depend_add(First,NewProperty), + ard_depend_add(First,NewProperty), ard_depend_addto(NewProperty,Depends). ard_depend_addfrom(NewProperty,[ToDepend]) :- ard_depend_add(NewProperty,ToDepend). ard_depend_addfrom(NewProperty,[First|Depends]) :- - ard_depend_add(NewProperty,First), + ard_depend_add(NewProperty,First), ard_depend_addfrom(NewProperty,Depends). ard_depend_addfrom(_,[]). ard_depend_delto(NewProperty,[ToDepend]) :- ard_depend_del(ToDepend,NewProperty). ard_depend_delto(NewProperty,[First|Depends]) :- - ard_depend_del(First,NewProperty), + ard_depend_del(First,NewProperty), ard_depend_delto(NewProperty,Depends). ard_depend_delfrom(NewProperty,[ToDepend]) :- ard_depend_del(NewProperty,ToDepend). ard_depend_delfrom(NewProperty,[First|Depends]) :- - ard_depend_del(NewProperty,First), + ard_depend_del(NewProperty,First), ard_depend_delfrom(NewProperty,Depends). % adding a list of properties +% no sorting needed here, done in ard_property_add - nivertius ard_property_list_add([Property]):- ard_property_add(Property). ard_property_list_add([Property|ListOfPropertys]):- @@ -194,7 +202,8 @@ ard_depend_list_add(DepList). % removes all dependencies on the Property -ard_depend_del_all(Property):- +ard_depend_del_all(PropertyUnprepared):- + sort(PropertyUnprepared,Property), retractall(ard_depend(Property,_)), retractall(ard_depend(_,Property)). @@ -209,11 +218,30 @@ \+ ard_att_conceptual(Att). -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Transformations -ard_finalize(From,To):- ard_transform_finalize(From,To). +% nested sort, sorts infinitly nested lists +nested_sort([H|T],S) :- + is_list(H), + nested_sort(H,RD), + nested_sort(T,RS), + sort([RD|RS],S). + +nested_sort([H|T],S) :- + atom(H), + nested_sort(T,RS), + sort([H|RS],S). + +nested_sort([],[]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Transformations +ard_finalize(FromUnprepared,ToUnprepared):- + sort(FromUnprepared,From), + nested_sort(ToUnprepared,To), + ard_transform_finalize(From,To). % finalization with adding appropriate attributes -ard_finalize_att_add(From,To):- +ard_finalize_att_add(FromUnprepared,ToUnprepared):- + sort(FromUnprepared,From), + nested_sort(ToUnprepared,To), ard_att_add_list(To), ard_finalize(From,To). @@ -228,48 +256,53 @@ % OldProperty =.. [PropertyName, [OldAtt]], % work only on simple propertys % NewProperty =.. [PropertyName, ListOfNewAtts], [_] = OldProperty, % work only on simple propertys +% no sorting of OldProperty needed then (list with length 1 is always sorted) +% altrough ListOfNewAtts should be, and is in appropriate predicates - nivertius ard_property(OldProperty), ard_depend_findfrom(OldProperty,FromDepends), ard_depend_findto(OldProperty,ToDepends), - ard_property_add(ListOfNewAtts), - ard_depend_addto(ListOfNewAtts,ToDepends), + ard_property_add(ListOfNewAtts), + ard_depend_addto(ListOfNewAtts,ToDepends), ard_depend_addfrom(ListOfNewAtts,FromDepends), ard_depend_delto(OldProperty,ToDepends), - ard_depend_delfrom(OldProperty,FromDepends), + ard_depend_delfrom(OldProperty,FromDepends), %FIXED4XML ard_property_del(OldProperty), - ard_hist_add(OldProperty,ListOfNewAtts). + ard_hist_add(OldProperty,ListOfNewAtts). % retract(OldProperty), ard_hist. ard_transform_finalize(OldProperty, ListOfNewAtts) :- [_] = OldProperty, % work only on simple propertys ard_property(OldProperty), ard_depend_findfrom(OldProperty,FromDepends), - ard_property_add(ListOfNewAtts), + ard_property_add(ListOfNewAtts), ard_depend_addfrom(ListOfNewAtts,FromDepends), ard_depend_delfrom(OldProperty,FromDepends), %FIXED4XML ard_property_del(OldProperty), - ard_hist_add(OldProperty,ListOfNewAtts). + ard_hist_add(OldProperty,ListOfNewAtts). ard_transform_finalize(OldProperty, ListOfNewAtts) :- [_] = OldProperty, % work only on simple propertys ard_property(OldProperty), ard_depend_findto(OldProperty,ToDepends), - ard_property_add(ListOfNewAtts), + ard_property_add(ListOfNewAtts), ard_depend_addto(ListOfNewAtts,ToDepends), ard_depend_delto(OldProperty,ToDepends), %FIXED4XML ard_property_del(OldProperty), - ard_hist_add(OldProperty,ListOfNewAtts). + ard_hist_add(OldProperty,ListOfNewAtts). ard_transform_finalize(OldProperty, ListOfNewAtts) :- [_] = OldProperty, % work only on simple propertys ard_property(OldProperty), \+ ard_depend_findfrom(OldProperty,_), \+ ard_depend_findto(OldProperty,_), - ard_property_add(ListOfNewAtts), + ard_property_add(ListOfNewAtts), %FIXED4XML ard_property_del(OldProperty), - ard_hist_add(OldProperty,ListOfNewAtts). + ard_hist_add(OldProperty,ListOfNewAtts). % retract(OldProperty), ard_hist. % split which defines functional dependencies - all in one :) % Dependecy list: [[FromProperty,ToProperty],[FromProperty1,ToProperty1]...] -ard_split(Property,NewPropertyList,DependList):- +ard_split(PropertyUnprepared,NewPropertyListUnprepared,DependListUnprepared):- + sort(PropertyUnprepared,Property), + nested_sort(NewPropertyListUnprepared,NewPropertyList), + nested_sort(DependListUnprepared,DependList), % FIXME check if PropertyList has all attribs from Property % FIXME check if all propertys from FeaturList can be added % FIXME check if dependencies from DependList concern new propertys or neighboring propertys @@ -280,7 +313,7 @@ ard_hist_add(Property,NewPropertyList). -% model cleanup +% model cleanup pur:- retractall(ard_att(_)), retractall(ard_depend(_,_)), @@ -290,15 +323,20 @@ % handling history ard_hist_add(OldProperty,NewProperty):- + % why OldProperty not need to be in the database? - nivertius + % is NewProperty out parameter? no sorting needed then. - nivertius ard_property(NewProperty), assert(ard_hist(OldProperty,NewProperty)). ard_hist_add(_,[]). ard_hist_add(OldProperty,[NewProperty|PropertyList]):- + % this should probably do explicit distinction between adding a property list and single property ard_property(NewProperty), assert(ard_hist(OldProperty,NewProperty)), ard_hist_add(OldProperty,PropertyList). -ard_hist_del(From,To):- +ard_hist_del(FromUnprepared,ToUnprepared):- + sort(FromUnprepared,From), + sort(ToUnprepared,To), retract(ard_hist(From,To)). ard_hist_findfrom(Att,ListOfDepends) :- @@ -311,14 +349,15 @@ % append a new attribute to a TPH node ard_hist_append(NewAtt,TPHproperty) :- +% sorting done in appropriate predicates - nivertius ard_att(NewAtt), % ard_hist(TPHproperty,_), - + ard_hist_findto(TPHproperty,ToList), ard_hist_findfrom(TPHproperty,FromList), ard_property_add([NewAtt|TPHproperty]), % fixed after xml model update - ard_hist_addto([NewAtt|TPHproperty],ToList), + ard_hist_addto([NewAtt|TPHproperty],ToList), ard_hist_addfrom([NewAtt|TPHproperty],FromList), ard_hist_delto(TPHproperty,ToList), @@ -328,32 +367,32 @@ ard_hist_addto(NewProperty,[ToDepend]) :- % ard_hist_insert(ToDepend,NewProperty). - assert(ard_hist(NewProperty,ToDepend)). + ard_hist_add(NewProperty,ToDepend). ard_hist_addto(NewProperty,[First|Depends]) :- %ard_hist_add(First,NewProperty), - assert(ard_hist(NewProperty,First)), + ard_hist_add(NewProperty,First), ard_hist_addto(NewProperty,Depends). ard_hist_addto(_,[]). ard_hist_addfrom(NewProperty,[ToDepend]) :- - assert(ard_hist(ToDepend,NewProperty)). + ard_hist_add(ToDepend,NewProperty). ard_hist_addfrom(NewProperty,[First|Depends]) :- % ard_hist_add(NewProperty,First), - assert(ard_hist(NewProperty,First)), + ard_hist_add(NewProperty,First), ard_hist_addfrom(NewProperty,Depends). ard_hist_addfrom(_,[]). ard_hist_delto(NewProperty,[ToDepend]) :- ard_hist_del(NewProperty,ToDepend). ard_hist_delto(NewProperty,[First|Depends]) :- - ard_hist_del(NewProperty,First), + ard_hist_del(NewProperty,First), ard_hist_delto(NewProperty,Depends). ard_hist_delto(_,[]). ard_hist_delfrom(NewProperty,[ToDepend]) :- ard_hist_del(ToDepend,NewProperty). ard_hist_delfrom(NewProperty,[First|Depends]) :- - ard_hist_del(First,NewProperty), + ard_hist_del(First,NewProperty), ard_hist_delfrom(NewProperty,Depends). ard_hist_delfrom(_,[]). @@ -368,7 +407,6 @@ %collapse property ard_hist_property_collapse(CollapsedProperty):- ard_hist_property_to_collapse_to(Property), - ard_hist(Property,_), % write('add-check:'), write(Property), nl, % ard_property_add(Property), % write('add-done: '), write(Property), nl, Index: varda_refactor.pl =================================================================== RCS file: /mnt/cvs/cvs-hades/varda/varda_refactor.pl,v retrieving revision 1.7 diff -u -r1.7 varda_refactor.pl --- varda_refactor.pl 2 Mar 2008 23:14:55 -0000 1.7 +++ varda_refactor.pl 19 Mar 2009 10:40:39 -0000 @@ -8,7 +8,7 @@ % % Copyright (C) 2006-9 by the HeKatE Project % -% VARDA has been develped by the HeKatE Project, +% VARDA has been develped by the HeKatE Project, % see http://hekate.ia.agh.edu.pl % % This file is part of VARDA. @@ -39,7 +39,7 @@ % example: trace, ard_att_add('Alpha'),ard_refactor_attribute_add('Alpha',[['D']]). % example: trace, ard_att_add('alpha'),ard_refactor_attribute_add('alpha',[['D']]). % accpets a single attribute, and in this case a single element list of nodes, where the att should be added -% it means, that the new att should be +% it means, that the new att should be ard_refactor_attribute_add(NewAtt, [Node]) :- ard_att(NewAtt), %% write(Node), @@ -52,7 +52,7 @@ assert(ard_hist([NewAtt|Node],[NewAtt])), ard_property_add([NewAtt]). % atfer xmlmodel fix % ard_refactor_update_ard([NewAtt]). -%%nope ard_property_add([Node]), +%%nope ard_property_add([Node]), %% assert(ard_hist([NewAtt|Node],Node)). %%% % example: trace, ard_att_add('Beta'),ard_refactor_attribute_add('Be',[['B','C'],['B'],['b']]). @@ -94,7 +94,7 @@ ard_hist_is_simpleconceptual(Node) :- Node = [Att], ard_att_conceptual(Att). - + ard_hist_parent_is_simpleconceptual(Node) :- ard_hist([Parent],Node), % gives the parent of the given node, if parent is simple node ard_att_conceptual(Parent). @@ -158,7 +158,7 @@ ard_property_add([NewAtt]), ard_hist_findfrom(Last,ToList), assert(ard_hist([NewAtt|Last],[NewAtt])), - ard_hist_addfrom([NewAtt|Last],ToList), + ard_hist_addfrom([NewAtt|Last],ToList), ard_hist_delfrom(Last,ToList). refactor_finalize(NewAtt, [TPHproperty]) :- ard_hist_append(NewAtt,TPHproperty). @@ -174,21 +174,34 @@ % trace,ard_att_add('Client'),refactor_finalize('Client',[['Policy','Premium'],['Client','Policy'],['Client']]). % trace,ard_att_add('Client'),refactor_finalize('Client',[['Client','Policy'],['Client']]). -refactor_finalize_add(Node, NewNode) :- +refactor_finalize_add(Node, NewNodeUnprepared) :- + % why Node needs to have predecessor history node? - nivertius ard_hist(_,Node), Node=[_],%simple node, we should also check if conceptual att + % ard_history_add here ? - nivertius + sort(NewNodeUnprepared,NewNode), assert(ard_hist(Node,NewNode)). - -refactor_split([NewAtt],TPHproperty) :- + +refactor_split([NewAtt],TPHpropertyUnprepared) :- + sort(TPHpropertyUnprepared, TPHproperty), + % ard_history_add here ? - nivertius assert(ard_hist(TPHproperty,[NewAtt])). -refactor_split([FirstAtt|NewAtts],TPHproperty) :- +refactor_split([FirstAtt|NewAtts],TPHpropertyUnprepared) :- + sort(TPHpropertyUnprepared, TPHproperty), + % ard_history_add here ? - nivertius + % reusing refactor_split above clause? - nivertius assert(ard_hist(TPHproperty,FirstAtt)), refactor_split(NewAtts,TPHproperty). -refactor_split_final([NewAtt],TPHproperty) :- +refactor_split_final([NewAtt],TPHpropertyUnprepared) :- + sort(TPHpropertyUnprepared, TPHproperty), + % ard_history_add here ? - nivertius assert(ard_hist(TPHproperty,[NewAtt])), ard_property_add([NewAtt]). -refactor_split_final([FirstAtt|NewAtts],TPHproperty) :- +refactor_split_final([FirstAtt|NewAtts],TPHpropertyUnprepared) :- + % ard_history_add here ? - nivertius + % reusing refactor_split_final above clause? - nivertius + sort(TPHpropertyUnprepared, TPHproperty), assert(ard_hist(TPHproperty,[FirstAtt])), ard_property_add([FirstAtt]), refactor_split_final(NewAtts,TPHproperty). @@ -206,6 +219,6 @@ %refactor_finalize_helper(PropList). % add a new attribute, to an existing TPH property %refactor_property(NewAtt, Property). - - + +