# Global change

This plug-out defined in C++ allows to do global modification of the artifact, classes, operations, attributes and relations definitions, working recursively from the browser element on which it is applied.

When you change default definitions or declarations in the generation settings, these changes are not propagated in the already existing elements to not broke them. This plug-out allows you to apply these changes if needed on a controlled way.

This plug-out may be applied on a package (including the project itself), class view, deployment view or a class, and works through this dialog :

The filters are optional are allow to not do the change on all the potential definitions and declarations. An empty filter is ignored, else a filter may be used to consider the forms containing it (with is set) or not containing it (without is set). When you have several filters you may conjugate them with and or or, the priority of and and or are the standard ones (like in C++ Java or Php). In case you have one filter, you must use filter 1. In case you have two filters you must use filter 1 and 2.

It is also possible to filter through the stereotype. Choose any to not consider the stereotypes, is to consider only the elements having the specified stereotype (may be an empty one), and is not to not consider the elements having the specified stereotype (may be an empty one).

Several targets may be set, to choose on which kind of elements the change must be done.

Several languages may be set too, to choose for which language the definition / declarations the changes must be done.

Current indicates the current form to be changed, new the value, the substitution being done on the element definitions / declarations compatible with all the previous indications.

Notes : except for the stereotype, \n is used to indicate a line break in the inputs. The carriage return characters are removed to not pollute the filtering, searching and replacement. At most one replacement is done by form.

Examples of use :

- you want to replace everywhere ${comment} by ${description} : all the filters must be empty, set any, artifact, class, operation, attribute and relation, set the right languages, set current to ${comment} and $new to ${description}, press Replace.

- In the old releases, the operation body indent must be set inside the body because the form ${body} was not preceded by two spaces, to replace the old definitions by the new default one where ${body} is placed after two spaces, and to keep the definition having these to spaces unchanged : the first filter must be set to <space><space>${body} (where <space> is a space character !) and you set without, the other filters are empty, set operation only, set the right languages, set current to ${body} and $new to <space><space>${body} (where <space> is a space character !), press Replace.

When you ask for a replacement, a dialog indicate how many changes was done, and may be how many can't be done because it is not possible to set the definition / declaration of a read only element.

Warning, global changes may have dramatic consequences when the filtering is not sufficient !

Previous : Deploy classes

Next : plug-outs