All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.umlg.javageneration.visitor.clazz.RootEntryPointBuilder Maven / Gradle / Ivy

package org.umlg.javageneration.visitor.clazz;

import org.apache.commons.lang.StringUtils;
import org.eclipse.uml2.uml.AssociationClass;
import org.eclipse.uml2.uml.Class;
import org.umlg.framework.ModelLoader;
import org.umlg.framework.VisitSubclasses;
import org.umlg.framework.Visitor;
import org.umlg.generation.Workspace;
import org.umlg.java.metamodel.OJPathName;
import org.umlg.java.metamodel.annotation.OJAnnotatedClass;
import org.umlg.java.metamodel.annotation.OJAnnotatedOperation;
import org.umlg.javageneration.util.UmlgClassOperations;
import org.umlg.javageneration.util.UmlgGenerationUtil;
import org.umlg.javageneration.visitor.BaseVisitor;

public class RootEntryPointBuilder extends BaseVisitor implements Visitor {

	public RootEntryPointBuilder(Workspace workspace) {
		super(workspace);
	}

	@Override
    @VisitSubclasses({Class.class, AssociationClass.class})
	public void visitBefore(Class clazz) {
		if (!UmlgClassOperations.hasCompositeOwner(clazz) && !clazz.isAbstract()) {
			OJAnnotatedClass root = this.workspace.findOJClass(UmlgGenerationUtil.UmlgRootPackage.toJavaString() + "." + StringUtils.capitalize(ModelLoader.INSTANCE.getModel().getName()));
			addGetterToAppRootForRootEntity(clazz, root);
		}
//        if (!clazz.isAbstract()) {
//            addGetterToMetaClassForRootEntity(clazz);
//        }
	}

    private void addGetterToMetaClassForRootEntity(Class clazz) {
        OJAnnotatedClass annotatedClass = this.workspace.findOJClass(UmlgGenerationUtil.UmlgRootPackage.toJavaString() + "." + StringUtils.capitalize(ModelLoader.INSTANCE.getModel().getName()));
        OJAnnotatedOperation getter = new OJAnnotatedOperation("get" + UmlgClassOperations.getMetaClassPathName(clazz).getLast(),
                UmlgClassOperations.getMetaClassPathName(clazz));
        annotatedClass.addToOperations(getter);
        annotatedClass.addToImports(UmlgGenerationUtil.umlgMemorySequence);
        annotatedClass.addToImports(new OJPathName("java.util.ArrayList"));
        annotatedClass.addToImports(UmlgClassOperations.getMetaClassPathName(clazz));
        getter.getBody().addToStatements("return " + UmlgClassOperations.getMetaClassPathName(clazz) + ".getInstance()");
    }

    private void addGetterToAppRootForRootEntity(Class clazz, OJAnnotatedClass root) {
		OJAnnotatedOperation getter = new OJAnnotatedOperation("get" + UmlgClassOperations.className(clazz),
				UmlgGenerationUtil.umlgSet.getCopy().addToGenerics("? extends " + UmlgClassOperations.getPathName(clazz).getLast()));
		getter.setStatic(true);
		root.addToOperations(getter);
		getter.getBody().addToStatements("return " + UmlgClassOperations.getPathName(clazz) + ".allInstances()");
        root.addToImports(UmlgClassOperations.getPathName(clazz));
		root.addToImports(UmlgGenerationUtil.tinkerDirection);
        root.addToImports(UmlgGenerationUtil.UmlgLabelConverterFactoryPathName);
	}

	@Override
	public void visitAfter(Class clazz) {
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy