+
+ @Override
+ public void search(SupportType searchOn, String keywords, int page, int item)
+ throws IOException {
+
+ }
+
+ @Override
+ public void searchTag(SupportType searchOn, int page, int item,
+ String... tags) throws IOException {
+ BasicSearchable search = BasicSearchable.getSearchable(searchOn);
+ List<SearchableTag> stags = search.getTags();
+
+ SearchableTag stag = null;
+ for (String tag : tags) {
+ stag = null;
+ for (int i = 0; i < stags.size(); i++) {
+ if (stags.get(i).getName().equalsIgnoreCase(tag)) {
+ stag = stags.get(i);
+ break;
+ }
+ }
+
+ if (stag != null) {
+ search.fillTag(stag);
+ stags = stag.getChildren();
+ } else {
+ stags = new ArrayList<SearchableTag>();
+ break;
+ }
+ }
+
+ if (stag != null) {
+ if (page <= 0) {
+ if (stag.isLeaf()) {
+ search.search(stag, 1);
+ System.out.println(stag.getPages());
+ } else {
+ System.out.println(stag.getCount());
+ }
+ } else {
+ List<MetaData> metas = null;
+ List<SearchableTag> subtags = null;
+ int count;
+
+ if (stag.isLeaf()) {
+ metas = search.search(stag, page);
+ count = metas.size();
+ } else {
+ subtags = stag.getChildren();
+ count = subtags.size();
+ }
+
+ if (item > 0) {
+ if (item <= count) {
+ if (metas != null) {
+ MetaData meta = metas.get(item - 1);
+ System.out.println(page + "/" + item + ": "
+ + meta.getTitle());
+ System.out.println();
+ System.out.println(meta.getUrl());
+ System.out.println();
+ System.out.println("Tags: " + meta.getTags());
+ System.out.println();
+ for (Paragraph para : meta.getResume()) {
+ System.out.println(para.getContent());
+ System.out.println("");
+ }
+ } else {
+ SearchableTag subtag = subtags.get(item - 1);
+
+ String sp = "";
+ if (subtag.getParent() != null) {
+ List<String> parents = new ArrayList<String>();
+ for (SearchableTag parent = subtag.getParent(); parent != null; parent = parent
+ .getParent()) {
+ parents.add(parent.getName());
+ }
+ for (String parent : parents) {
+ if (!sp.isEmpty()) {
+ sp += " / ";
+ }
+ sp += parent;
+ }
+ }
+
+ // TODO: i18n
+ String stories = "stories";
+ String num = StringUtils.formatNumber(subtag
+ .getCount());
+ if (sp.isEmpty()) {
+ System.out.println(String.format(
+ "%d/%d: %s, %s %s", page, item,
+ subtag.getName(), num, stories));
+ } else {
+ System.out.println(String.format(
+ "%d/%d: %s (%s), %s %s", page, item,
+ subtag.getName(), sp, num, stories));
+ }
+ }
+ } else {
+ System.out.println("Invalid item: only " + count
+ + " items found");
+ }
+ } else {
+ if (metas != null) {
+ int i = 0;
+ for (MetaData meta : metas) {
+ System.out
+ .println((i + 1) + ": " + meta.getTitle());
+ i++;
+ }
+ } else {
+ int i = 1;
+ for (SearchableTag subtag : subtags) {
+ String total = "";
+ if (subtag.getCount() > 0) {
+ total = StringUtils.formatNumber(subtag
+ .getCount());
+ }
+
+ if (total.isEmpty()) {
+ System.out.println(String.format("%d: %s", i,
+ subtag.getName()));
+ } else {
+ System.out.println(String.format("%d: %s (%s)",
+ i, subtag.getName(), total));
+ }
+
+ i++;
+ }
+ }
+ }
+ }
+ } else {
+ for (SearchableTag s : stags) {
+ System.out.println(s.getName());
+ }
+ }
+ }