package org.softlang.company.features;
import org.softlang.company.model.*;
import static javaf.syb.Transformation.*;
import javaf.prelude.*;
public class Cut {
public static void cut(Company c) {
everywhere(orIdentity(updateSalary())).apply(c);
}
public static Action<Employee> updateSalary() {
return new Action<Employee>() {
public void apply(Employee x) {
x.setSalary(x.getSalary() / 2);
}
};
}
public static void cutManagers(Company c) {
traverse(null).apply(c);
}
public static Action<Object> traverse(final Object parent) {
return new Action<Object>() {
public void apply(Object o) {
orIdentity(updateSalary(parent)).apply(o);
all(traverse(o)).apply(o);
}
};
}
public static Action<Employee> updateSalary(final Object parent) {
return new Action<Employee>() {
public void apply(Employee x) {
if (parent instanceof Department)
x.setSalary(x.getSalary() / 2);
}
};
}
}