package org.fastcatsearch.plugin; import org.fastcatsearch.http.ActionMapping; import org.fastcatsearch.http.ActionMethod; import org.fastcatsearch.http.action.management.analysis.GetBasicAnalizedResultAction; import org.fastcatsearch.util.DynamicClassLoader; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import java.util.List; @XmlType(name = "plugin") public class PluginSetting { protected String id; protected String namespace; protected String className; protected String name; protected String version; protected String description; protected boolean useDB; protected List<Action> actionList; protected List<PluginSchedule> scheduleList; public String getKey(String name) { return namespace + "/" + id + "/" + name; } @XmlAttribute public String getId() { return id; } public void setId(String id) { this.id = id.toUpperCase(); } @XmlAttribute public String getNamespace() { return namespace; } public void setNamespace(String namespace) { this.namespace = namespace; } @XmlAttribute(name = "class") public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } @XmlElement public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } @XmlElement public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @XmlElement(name = "use-db") public boolean isUseDB() { return useDB; } public void setUseDB(boolean useDB) { this.useDB = useDB; } @XmlElementWrapper(name = "action-list") @XmlElement(name = "action") public List<Action> getActionList() { return actionList; } public void setActionList(List<Action> actionList) { this.actionList = actionList; } @XmlElementWrapper(name = "schedule-list") @XmlElement(name = "schedule") public List<PluginSchedule> getScheduleList() { return scheduleList; } public void setScheduleList(List<PluginSchedule> scheduleList) { this.scheduleList = scheduleList; } public static class Action { private String className; private ActionMapping actionMap; @XmlAttribute public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } //read only 속성. @XmlAttribute(required = false) public String getUri() { return findActionMapping("uri"); } @XmlAttribute(required = false) public String getMethods() { return findActionMapping("method"); } private String findActionMapping(String type) { if (actionMap == null) { try { Class<?> actionClass = DynamicClassLoader.loadClass(className); if (actionClass == null) { return null; } actionMap = actionClass.getAnnotation(ActionMapping.class); } catch (Exception e) { Class<?> actionClass = GetBasicAnalizedResultAction.class; actionMap = actionClass.getAnnotation(ActionMapping.class); } } if (actionMap != null) { if ("uri".equals(type)) { return actionMap.value(); } if ("method".equals(type)) { String ret = ""; ActionMethod[] methods = actionMap.method(); for (ActionMethod method : methods) { if (!"".equals(ret)) { ret += ","; } ret += method.name(); } return ret; } } return null; } } public static class PluginSchedule { private String className; private String startTime; private int periodInMinute; private String args; @XmlAttribute(name = "class") public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } @XmlAttribute public String getStartTime() { return startTime; } public void setStartTime(String startTime) { this.startTime = startTime; } @XmlAttribute public int getPeriodInMinute() { return periodInMinute; } public void setPeriodInMinute(int periodInMinute) { this.periodInMinute = periodInMinute; } @XmlAttribute public String getArgs() { return args; } public void setArgs(String args) { this.args = args; } } }