Skip to content

Instantly share code, notes, and snippets.

View benjishults's full-sized avatar

Benjamin Shults benjishults

  • SmartThings Inc.
View GitHub Profile
@benjishults
benjishults / Application.java
Created December 31, 2018 18:04
Application second pass in enum refactor demo
public class Application {
public static void main(String[] args) {
Path file = Path.of(args[0]);
DocumentType.forPath(file).processFile(file);
}
}
@benjishults
benjishults / Processor.java
Created December 31, 2018 18:04
Processor third pass in enum refactor demo
public interface Processor {
void processFile(Path file);
}
@benjishults
benjishults / Processor.java
Created December 31, 2018 18:03
Processor second pass in enum refactor demo
public class Processor {
public void processFile(Path file) {
switch (DocumentType.forPath(file)) {
case TXT:
processTextFile(file);
break;
case MD:
processMarkdownFile(file);
break;
case HTML:
@benjishults
benjishults / DocumentType.java
Created December 31, 2018 18:02
DocumentType first pass in enum refactoring demo
public enum DocumentType {
TXT("txt", "text"),
MD("md", "markdown"),
HTML("html", "htm");
String[] extensions;
DocumentType(String... extensions) {
this.extensions = Arrays.copyOf(extensions, extensions.length);
}
@benjishults
benjishults / Application.java
Created December 31, 2018 18:00
Application first pass in enumeration refactor demo
public class Application {
public static void main(String[] args) {
new Processor().processFile(Path.of(args[0]));
}
}
@benjishults
benjishults / Processor.java
Created December 31, 2018 17:58
Processor first pass in enumeration refactoring demo
public class Processor {
public void processFile(Path file) {
switch (FileNameHelper.getLowercaseExtension(file)) {
case DocumentType.TXT:
case DocumentType.TEXT:
processTextFile(file);
break;
case DocumentType.MD:
case DocumentType.MARKDOWN:
processMarkdownFile(file);
@benjishults
benjishults / CommentController.java
Created December 31, 2018 17:37
CommentController with post code
public class CommentController {
// ... fields and constructor omitted ...
public Comment postComment(PostCommentPayload payload) {
// .. validation omitted ...
CommentUserGroup cug = cugDao.find(payload.getCommentUserGroupId());
ExternalGroupHelper groupHelper = extGroupHelperProvider.getHelperForType(cug.getExtGroupType());
if (groupHelper.isMember(securityContextHelper.getCurrentUser(), cug.getExtGroupId())) {
Comment persistedComment = commentDao.persist(payload.toComment());
fireCommentAddedEvent(persistedComment);
return persistedComment;
@benjishults
benjishults / CommentController.java
Created December 31, 2018 17:35
CommentController first pass
public class CommentController {
private static final Logger LOG = LoggerFactory.getLogger(CommentController.class);
// implementation of listeners might need to be thread safe
// depending on whether you allow dynamic change to
// listener registration
private Set<CommentAddedListener> listeners;
// ... some fields and constructor omitted ...
@benjishults
benjishults / CommentAddedListener.java
Created December 31, 2018 17:32
CommentAddedListener
public interface CommentAddedListener {
void processComment(Comment comment);
}
@benjishults
benjishults / Comment.java
Created December 31, 2018 17:31
Java Comment data class
public class Comment {
private String commentUserGroupId;
private User author;
private Object payload;
// ... constructor, getters, equals, hashCode ...
}