package org.manalith.ircbot.plugin.javaapi; import java.util.StringTokenizer; import org.apache.commons.lang3.StringUtils; import org.manalith.ircbot.plugin.SimplePlugin; import org.manalith.ircbot.resources.MessageEvent; import org.springframework.stereotype.Component; @Component public class JavaApiPlugin extends SimplePlugin { private static final String NAMESPACE = "!japi"; @Override public String getName() { return "Java API Viewer"; } @Override public String getCommands() { return NAMESPACE; } @Override public String getHelp() { return "설 명: 지정한 클래스 이름에 대한 자바문서 연결을 보여줍니다, 사용법: !japi [클래스명]"; } @Override public void onMessage(MessageEvent event) { String message = event.getMessage(); if (message.equals(NAMESPACE + ":help")) event.respond(getHelp()); else if (message.length() >= 8 && message.substring(0, 8).equals("java-api")) { event.respond(getApiDocument(message)); } } private String getApiDocument(String query) { StringBuilder sb = new StringBuilder(); StringTokenizer st = new StringTokenizer(query, " "); st.nextToken(); if (st.countTokens() == 0 || st.countTokens() > 2) { sb.append("사용법 : java-api [KEYWORD] [SOURCE]"); } else if (st.countTokens() == 1) { sb.append(JavaDocSearchFactory.getSearch( JavaDocSources.getSourceURL("j2se")).search(st.nextToken())); } else if (st.countTokens() == 2) { String keyword = st.nextToken(); String sourceName = st.nextToken(); SearchInterface searcher = null; if (sourceName.equals("search")) { // TODO search 기능 만들기 // FIXME 미완성 - String을 리턴하는 함수 자체의 구조적 한계 for (String sourceURL : JavaDocSources.getSources().values()) { searcher = JavaDocSearchFactory.getSearch(sourceURL); } } else if (JavaDocSources.hasSource(sourceName)) { searcher = JavaDocSearchFactory.getSearch(JavaDocSources .getSourceURL(sourceName)); sb.append(searcher.search(keyword)); if (StringUtils.isBlank(sb.toString())) { sb.append("["); sb.append(query); sb.append("]"); sb.append(" 을(를) 찾을 수 없습니다."); } } else { sb.append("현재 등록된 소스 : "); sb.append(JavaDocSources.getSourceNamesByString()); } } return sb.toString(); } }