1 package org.kuali.common.devops.metadata.function; 2 3 import static com.google.common.base.Optional.fromNullable; 4 import static org.apache.commons.lang.StringUtils.substringBetween; 5 import static org.kuali.common.util.base.Precondition.checkNotNull; 6 7 import org.kuali.common.core.build.ValidatingBuilder; 8 import org.kuali.common.core.validate.annotation.IdiotProofImmutable; 9 10 import com.google.common.base.Function; 11 import com.google.common.base.Optional; 12 13 @IdiotProofImmutable 14 public final class TomcatVersionFunction implements Function<String, Optional<String>> { 15 16 private final String open; 17 private final String close; 18 19 @Override 20 public Optional<String> apply(String content) { 21 checkNotNull(content, "content"); 22 return fromNullable(substringBetween(content, open, close)); 23 } 24 25 private TomcatVersionFunction(Builder builder) { 26 this.open = builder.open; 27 this.close = builder.close; 28 } 29 30 public static TomcatVersionFunction create() { 31 return builder().build(); 32 } 33 34 public static Builder builder() { 35 return new Builder(); 36 } 37 38 public static class Builder extends ValidatingBuilder<TomcatVersionFunction> { 39 40 private String open = "<h3>Apache Tomcat/"; 41 private String close = "</h3>"; 42 43 public Builder open(String open) { 44 this.open = open; 45 return this; 46 } 47 48 public Builder close(String close) { 49 this.close = close; 50 return this; 51 } 52 53 @Override 54 public TomcatVersionFunction build() { 55 return validate(new TomcatVersionFunction(this)); 56 } 57 58 public String getOpen() { 59 return open; 60 } 61 62 public void setOpen(String open) { 63 this.open = open; 64 } 65 66 public String getClose() { 67 return close; 68 } 69 70 public void setClose(String close) { 71 this.close = close; 72 } 73 74 } 75 76 public String getOpen() { 77 return open; 78 } 79 80 public String getClose() { 81 return close; 82 } 83 }