The adaptation precedence of an application (or order of adaptation of
various components) is given as a directed acyclic graph (DAG), with each
vertex being an atomic unit of adaptation, or a component which comprises
of atomic units of adaptation. Each such component has an associated DAG
specifying the order of adaptation with vertices as sub-components.
Relations among sub-components and associated actions are stored as a
table. The relations between sub-components of different components
follow a set of constraints in order to be compatible relations. A linear
order from the partial order is created as represented by the DAG and
follows that order for adaptation of each component. Each component x is
adapted atomically and then the table of relations is updated
appropriately. As and when a component y is to be adapted, the table is
looked-up and it is determined which relations and actions are to be
enforced upon y while its adaptation is being executed. A new version of
the application is the output at the end of the adaptation, which is
semantically consistent with the given relations and actions.