package com.technophobia.substeps.document.content.view.hover.model.javadoc; import java.util.List; import java.util.regex.Pattern; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.IJavaProject; import com.technophobia.eclipse.javadoc.ProjectJavaDocLocator; import com.technophobia.substeps.FeatureEditorPlugin; import com.technophobia.substeps.glossary.StepDescriptor; import com.technophobia.substeps.model.StepImplementation; import com.technophobia.substeps.supplier.Transformer; public class StepImplementationDescriptorJavadocLocator implements ProjectJavaDocLocator<StepImplTypeContext> { private final StepDescriptorProvider stepDescriptorProvider; private final Transformer<StepDescriptor, String> stepDescriptorToStringTransformer; public StepImplementationDescriptorJavadocLocator( final Transformer<StepDescriptor, String> stepDescriptorToStringTransformer) { this(stepDescriptorToStringTransformer, new StepDescriptorProvider() { @Override public List<StepDescriptor> descriptorsForClassInProject(final String className, final IProject project) { return FeatureEditorPlugin.instance().externalStepDescriptorsForClassInProject(className, project); } }); } public StepImplementationDescriptorJavadocLocator( final Transformer<StepDescriptor, String> stepDescriptorToStringTransformer, final StepDescriptorProvider stepDescriptorProvider) { this.stepDescriptorToStringTransformer = stepDescriptorToStringTransformer; this.stepDescriptorProvider = stepDescriptorProvider; } @Override public String formattedJavaDocFor(final StepImplTypeContext stepImplTypeContext, final IJavaProject project) { final StepImplementation stepImplementation = stepImplTypeContext.stepImpl(); final List<StepDescriptor> stepDescriptors = stepDescriptorProvider.descriptorsForClassInProject( stepImplementation.getImplementedIn().getName(), project.getProject()); for (final StepDescriptor stepDescriptor : stepDescriptors) { if (Pattern.matches(stepImplementation.getValue(), stepDescriptor.getExample())) { return asString(stepDescriptor); } } return null; } private String asString(final StepDescriptor stepDescriptor) { return stepDescriptorToStringTransformer.from(stepDescriptor); } }