![JAR search and dependency download from the Maven repository](/logo.png)
net.sf.nakeduml.javageneration.auditing.AuditImplementationStep Maven / Gradle / Ivy
package net.sf.nakeduml.javageneration.auditing;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import net.sf.nakeduml.feature.NakedUmlConfig;
import net.sf.nakeduml.feature.StepDependency;
import net.sf.nakeduml.feature.TransformationContext;
import net.sf.nakeduml.feature.visit.VisitBefore;
import net.sf.nakeduml.feature.visit.VisitorAdapter;
import net.sf.nakeduml.javageneration.AbstractJavaTransformationStep;
import net.sf.nakeduml.javametamodel.OJClass;
import net.sf.nakeduml.javametamodel.OJElement;
import net.sf.nakeduml.javametamodel.OJPackage;
import net.sf.nakeduml.javametamodel.OJPathName;
import net.sf.nakeduml.javametamodel.annotation.OJAnnotatedClass;
import net.sf.nakeduml.javametamodel.annotation.OJAnnotatedInterface;
import net.sf.nakeduml.metamodel.workspace.INakedModelWorkspace;
import net.sf.nakeduml.textmetamodel.TextWorkspace;
@StepDependency(phase = AuditGenerationPhase.class, requires = {})
public class AuditImplementationStep extends AbstractJavaTransformationStep {
@Override
public void initialize(OJPackage pac, NakedUmlConfig config, TextWorkspace textWorkspace) {
super.initialize(pac, config, textWorkspace);
}
public static final class OJVisitor extends VisitorAdapter {
private final HashSet persistentClasses;
private OJVisitor(HashSet classes) {
this.persistentClasses = classes;
}
@Override
public Collection extends OJElement> getChildren(OJElement root) {
if (root instanceof OJPackage) {
Set results = new HashSet();
OJPackage ojp = (OJPackage) root;
results.addAll(ojp.getSubpackages());
return results;
}
return Collections.emptySet();
}
@VisitBefore(matchSubclasses = true)
public void visitPackage(OJPackage p) {
for (OJClass c : p.getClasses()) {
if ((c instanceof OJAnnotatedInterface && !((OJAnnotatedInterface) c).getPathName().getFirst().startsWith("util"))
|| c instanceof OJAnnotatedClass && ((OJAnnotatedClass) c).hasAnnotation(new OJPathName("javax.persistence.Table"))) {
persistentClasses.add(c);
}
}
}
}
@Override
public void generate(INakedModelWorkspace workspace, TransformationContext context) {
TimestampAdder timestampAdder = new TimestampAdder();
timestampAdder.initialize(workspace, javaModel, config, textWorkspace);
timestampAdder.startVisiting(workspace);
// Make copies of the root packages just below the model package
OJPackage newRoot = new OJPackage();
Set rootCopies = new HashSet();
Set packages = this.javaModel.getSubpackages();
for (OJPackage ojPackage : packages) {
OJPackage deepCopy = ojPackage.getDeepCopy(null);
rootCopies.add(deepCopy);
deepCopy.setParent(newRoot);
}
// This next section must be here in the middle.
// It adds in a makeAuditCopy method. This method must only be on the
// original class
AuditEntryMassageOriginalClasses anotherAuditEntryOriginalClassesGenerator = new AuditEntryMassageOriginalClasses();
anotherAuditEntryOriginalClassesGenerator.initialize(workspace, this.javaModel, config, textWorkspace);
anotherAuditEntryOriginalClassesGenerator.startVisiting(workspace);
// Visit copy classes
Set classes = getClassesRecursively(newRoot);
AuditEntryMassage aeg = new AuditEntryMassage();
aeg.initialize(workspace, newRoot, config, textWorkspace, classes);
aeg.startVisiting(workspace);
AuditFixAnnotations auditFixAnnotations = new AuditFixAnnotations();
auditFixAnnotations.initialize(workspace, newRoot, config, textWorkspace, classes);
auditFixAnnotations.startVisiting(workspace);
}
private Set getClassesRecursively(OJPackage copy) {
final HashSet classes = new HashSet();
new OJVisitor(classes).startVisiting(copy);
return classes;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy