Skip to content

Commit

Permalink
Refactor method structure
Browse files Browse the repository at this point in the history
  • Loading branch information
c24Felix committed Jul 3, 2024
1 parent b80c33f commit 4a7cfb6
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 91 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,52 +60,6 @@ public class UrlBindingFactory {

private static final Log log = Log.getInstance(UrlBindingFactory.class);

/**
* Look for a binding pattern for the given {@link ActionBean} class, specified by the
* {@link org.stripesframework.web.action.UrlBinding} annotation. If the annotation is found,
* create and return a {@link UrlBinding} object for the class. Otherwise, return null.
*
* @param beanType The {@link ActionBean} type whose binding is to be parsed
* @return A {@link UrlBinding} if one is specified, or null if not.
* @throws ParseException If the pattern cannot be parsed
*/
public static UrlBinding parsePrimaryUrlBinding(Class<? extends ActionBean> beanType ) {
// check that class is annotated
org.stripesframework.web.action.UrlBinding annotation = beanType.getAnnotation(org.stripesframework.web.action.UrlBinding.class);
if ( annotation == null ) {
return null;
} else {
return parseUrlBinding(beanType, annotation.value());
}
}

/**
* Look for a additional binding patterns for the given {@link ActionBean} class, specified by the
* {@link org.stripesframework.web.action.UrlBinding} annotation.
*
* @param beanType The {@link ActionBean} type whose binding is to be parsed
* @return A list of {@link UrlBinding}
* @throws ParseException If the pattern cannot be parsed
*/
public static List<UrlBinding> parseAdditionalUrlBindings(Class<? extends ActionBean> beanType ) {
// check that class is annotated
org.stripesframework.web.action.UrlBinding annotation = beanType.getAnnotation(org.stripesframework.web.action.UrlBinding.class);
List<UrlBinding> bindings = new ArrayList<>();

if ( annotation == null ) {
return bindings;
}

for (String alternate: annotation.alternates()) {
UrlBinding urlBinding = parseUrlBinding(beanType, alternate);
if (urlBinding != null) {
bindings.add(urlBinding);
}
}

return bindings;
}

/**
* Parse the binding pattern and create a {@link UrlBinding} object for the {@link ActionBean}
* class. If pattern is null, then return null.
Expand Down Expand Up @@ -407,17 +361,7 @@ public UrlBinding getBindingPrototype( Class<? extends ActionBean> type ) {
return primaryBinding;
}

primaryBinding = parsePrimaryUrlBinding(type);
if ( primaryBinding != null ) {
addBinding(type, primaryBinding);
}

List<UrlBinding> urlBindings = parseAdditionalUrlBindings(type);
for (UrlBinding urlBinding : urlBindings) {
addBinding(type, urlBinding);
}

return primaryBinding;
return addUrlBindings(type);
}

/**
Expand Down Expand Up @@ -612,6 +556,37 @@ public String toString() {
return String.valueOf(_classCache);
}

/**
* Look for a binding pattern for the given {@link ActionBean} class, specified by the
* {@link org.stripesframework.web.action.UrlBinding} annotation. If the annotation is found,
* create and return a {@link UrlBinding} object for the class. Otherwise, return null.
*
* @param beanType The {@link ActionBean} type whose binding is to be parsed
* @return A {@link UrlBinding} if one is specified, or null if not.
* @throws ParseException If the pattern cannot be parsed
*/
protected UrlBinding addUrlBindings( Class<? extends ActionBean> beanType ) {
// check that class is annotated
org.stripesframework.web.action.UrlBinding annotation = beanType.getAnnotation(org.stripesframework.web.action.UrlBinding.class);
if ( annotation == null ) {
return null;
}

UrlBinding primaryBinding = parseUrlBinding(beanType, annotation.value());
if ( primaryBinding != null ) {
addBinding(beanType, primaryBinding);
}

for ( String alternate : annotation.alternates() ) {
UrlBinding urlBinding = parseUrlBinding(beanType, alternate);
if ( urlBinding != null ) {
addBinding(beanType, urlBinding);
}
}

return primaryBinding;
}

/**
* Map a path directly to a binding. If the path matches more than one binding, then a warning
* will be logged indicating such a condition, and the path will not be cached for any binding.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ public class UrlBindingFactoryTests {

private static UrlBindingFactory urlBindingFactory;

public static UrlBinding parsePrimaryUrlBinding( Class<? extends ActionBean> beanType ) {
// check that class is annotated
org.stripesframework.web.action.UrlBinding annotation = beanType.getAnnotation(org.stripesframework.web.action.UrlBinding.class);
if ( annotation == null ) {
return null;
} else {
return UrlBindingFactory.parseUrlBinding(beanType, annotation.value());
}
}

@BeforeAll
@SuppressWarnings("unchecked")
public static void setupClass() {
Expand All @@ -36,11 +46,7 @@ public static void setupClass() {

UrlBindingFactory factory = new UrlBindingFactory();
for ( Class<? extends ActionBean> clazz : classes ) {
factory.addBinding(clazz, UrlBindingFactory.parsePrimaryUrlBinding(clazz));
List<UrlBinding> bindings = UrlBindingFactory.parseAdditionalUrlBindings(clazz);
for ( UrlBinding binding : bindings ) {
factory.addBinding(clazz, binding);
}
factory.addUrlBindings(clazz);
}

urlBindingFactory = factory;
Expand All @@ -49,8 +55,8 @@ public static void setupClass() {
@Test
public void testConflictDetectionIndependentOfClassLoadingOrder_failsRegardlessOfOrder() {
UrlBindingFactory factory = new UrlBindingFactory();
factory.addBinding(FooActionBean.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean.class));
factory.addBinding(FooActionBean2.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean.class));
factory.addBinding(FooActionBean.class, parsePrimaryUrlBinding(FooActionBean.class));
factory.addBinding(FooActionBean2.class, parsePrimaryUrlBinding(FooActionBean.class));

Throwable throwable = catchThrowable(() -> factory.getBindingPrototype("/foo"));

Expand All @@ -60,18 +66,14 @@ public void testConflictDetectionIndependentOfClassLoadingOrder_failsRegardlessO
@Test
public void testConflictDetectionIndependentOfClassLoadingOrder_works() {
UrlBindingFactory factory = new UrlBindingFactory();
factory.addBinding(FooActionBean.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean.class));
factory.addBinding(FooActionBean2.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean2.class));
factory.addBinding(FooActionBean3.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean3.class));
factory.addBinding(FooActionBean4.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean4.class));
factory.addBinding(FooActionBean5.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean5.class));
factory.addBinding(FooActionBean6.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean6.class));
factory.addBinding(FooActionBean7.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean7.class));
factory.addBinding(FooActionBean8.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean8.class));
List<UrlBinding> bindings = UrlBindingFactory.parseAdditionalUrlBindings(FooActionBean8.class);
for ( UrlBinding binding : bindings ) {
factory.addBinding(FooActionBean8.class, binding);
}
factory.addUrlBindings(FooActionBean.class);
factory.addUrlBindings(FooActionBean2.class);
factory.addUrlBindings(FooActionBean3.class);
factory.addUrlBindings(FooActionBean4.class);
factory.addUrlBindings(FooActionBean5.class);
factory.addUrlBindings(FooActionBean6.class);
factory.addUrlBindings(FooActionBean7.class);
factory.addUrlBindings(FooActionBean8.class);

UrlBinding prototype = factory.getBindingPrototype("/foo");

Expand All @@ -82,18 +84,14 @@ public void testConflictDetectionIndependentOfClassLoadingOrder_works() {
@Test
public void testConflictDetectionIndependentOfClassLoadingOrder_worksWithDifferentOrder() {
UrlBindingFactory factory = new UrlBindingFactory();
List<UrlBinding> bindings = UrlBindingFactory.parseAdditionalUrlBindings(FooActionBean8.class);
for ( UrlBinding binding : bindings ) {
factory.addBinding(FooActionBean8.class, binding);
}
factory.addBinding(FooActionBean8.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean8.class));
factory.addBinding(FooActionBean7.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean7.class));
factory.addBinding(FooActionBean6.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean6.class));
factory.addBinding(FooActionBean5.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean5.class));
factory.addBinding(FooActionBean4.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean4.class));
factory.addBinding(FooActionBean3.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean3.class));
factory.addBinding(FooActionBean2.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean2.class));
factory.addBinding(FooActionBean.class, UrlBindingFactory.parsePrimaryUrlBinding(FooActionBean.class));
factory.addUrlBindings(FooActionBean8.class);
factory.addUrlBindings(FooActionBean7.class);
factory.addUrlBindings(FooActionBean6.class);
factory.addUrlBindings(FooActionBean5.class);
factory.addUrlBindings(FooActionBean4.class);
factory.addUrlBindings(FooActionBean3.class);
factory.addUrlBindings(FooActionBean2.class);
factory.addUrlBindings(FooActionBean.class);

UrlBinding prototype = factory.getBindingPrototype("/foo");

Expand All @@ -111,7 +109,7 @@ public void testParser1() {
for ( Class<? extends ActionBean> clazz : classes ) {
org.stripesframework.web.action.UrlBinding annotation = clazz.getAnnotation(org.stripesframework.web.action.UrlBinding.class);

Throwable throwable = catchThrowable(() -> UrlBindingFactory.parsePrimaryUrlBinding(clazz));
Throwable throwable = catchThrowable(() -> UrlBindingFactory.parseUrlBinding(clazz, annotation.value()));

assertThat(throwable).describedAs("Expected failure for parsing " + annotation.value()).isInstanceOf(ParseException.class);
}
Expand All @@ -128,7 +126,7 @@ public void testParser2() {
for ( Class<? extends ActionBean> clazz : classes ) {
org.stripesframework.web.action.UrlBinding annotation = clazz.getAnnotation(org.stripesframework.web.action.UrlBinding.class);

UrlBinding binding = UrlBindingFactory.parsePrimaryUrlBinding(clazz);
UrlBinding binding = UrlBindingFactory.parseUrlBinding(clazz, annotation.value());

assertThat(binding).isNotNull();
assertThat(binding.toString()).isEqualTo(removeEscapes(annotation.value()), "Parsed expression is not the same as original expression");
Expand Down Expand Up @@ -232,7 +230,7 @@ void testParser3() {
org.stripesframework.web.action.UrlBinding annotation = clazz.getAnnotation(org.stripesframework.web.action.UrlBinding.class);
String value = annotation.value();

UrlBinding binding = UrlBindingFactory.parsePrimaryUrlBinding(clazz);
UrlBinding binding = UrlBindingFactory.parseUrlBinding(clazz, annotation.value());
assertThat(binding).isNotNull();
assertThat(binding.getParameters()).hasSize(1);

Expand Down

0 comments on commit 4a7cfb6

Please sign in to comment.