package org.springframework.roo.classpath.converters; import static org.springframework.roo.classpath.converters.JavaPackageConverter.TOP_LEVEL_PACKAGE_SYMBOL; import static org.springframework.roo.project.LogicalPath.MODULE_PATH_SEPARATOR; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.Service; import org.springframework.roo.classpath.TypeLocationService; import org.springframework.roo.model.JavaPackage; import org.springframework.roo.model.JavaType; import org.springframework.roo.project.ProjectOperations; import org.springframework.roo.project.maven.Pom; import org.springframework.roo.shell.Shell; import org.springframework.roo.support.util.AnsiEscapeCode; /** * Records the last Java package and type used. * * @author Ben Alex * @since 1.0 */ @Component @Service public class LastUsedImpl implements LastUsed { private JavaPackage topLevelPackage; private JavaPackage javaPackage; private JavaType javaType; private Pom module; @Reference private ProjectOperations projectOperations; @Reference private Shell shell; @Reference private TypeLocationService typeLocationService; public JavaPackage getJavaPackage() { return javaPackage; } public JavaType getJavaType() { return javaType; } public JavaPackage getTopLevelPackage() { return topLevelPackage; } public void setPackage(final JavaPackage javaPackage) { Validate.notNull(javaPackage, "JavaPackage required"); if (javaPackage.getFullyQualifiedPackageName().startsWith("java.")) { return; } javaType = null; this.javaPackage = javaPackage; setPromptPath(javaPackage.getFullyQualifiedPackageName()); } private void setPromptPath(final String fullyQualifiedName) { if (topLevelPackage == null) { return; } String moduleName = ""; if (module != null && StringUtils.isNotBlank(module.getModuleName())) { moduleName = AnsiEscapeCode.decorate(module.getModuleName() + MODULE_PATH_SEPARATOR, AnsiEscapeCode.FG_CYAN); } topLevelPackage = new JavaPackage( typeLocationService .getTopLevelPackageForModule(projectOperations .getFocusedModule())); final String path = moduleName + fullyQualifiedName.replace( topLevelPackage.getFullyQualifiedPackageName(), TOP_LEVEL_PACKAGE_SYMBOL); shell.setPromptPath(path, StringUtils.isNotBlank(moduleName)); } public void setTopLevelPackage(final JavaPackage topLevelPackage) { this.topLevelPackage = topLevelPackage; } public void setType(final JavaType javaType) { Validate.notNull(javaType, "JavaType required"); if (javaType.getPackage().getFullyQualifiedPackageName() .startsWith("java.")) { return; } this.javaType = javaType; javaPackage = javaType.getPackage(); setPromptPath(javaType.getFullyQualifiedTypeName()); } public void setType(final JavaType javaType, final Pom module) { Validate.notNull(javaType, "JavaType required"); if (javaType.getPackage().getFullyQualifiedPackageName() .startsWith("java.")) { return; } this.module = module; this.javaType = javaType; javaPackage = javaType.getPackage(); setPromptPath(javaType.getFullyQualifiedTypeName()); } }