package org.softlang.company.model.proxy;
import org.softlang.company.model.company.*;
import org.softlang.company.features.visitor.*;
/**
* A proxy for companies to enforce access control policy for salaries.
*/
/* package */ class ProxyCompany implements Company {
private AccessControl context;
private Company subject;
/* package */ ProxyCompany(AccessControl context, Company subject) {
this.context = context;
this.subject = subject;
}
public String getName() {
return subject.getName();
}
public void setName(String name) {
subject.setName(name);
}
public Iterable<? extends Subunit> subunits() {
return subject.subunits();
}
public boolean add(Subunit u) {
u = context.deploy(u);
return subject.add(u);
}
public boolean remove(Subunit u) {
return subject.remove(u);
}
// Delegation is NOT appropriate here.
public void accept(VoidVisitor v) {
v.visit(this);
}
// Delegation is NOT appropriate here.
public <R> R accept(ReturningVisitor<R> v) {
return v.visit(this);
}
}