View Javadoc
1   /*
2    * Copyright 2012-2017 CodeLibs Project and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.codelibs.fess.app.web.admin.systeminfo;
17  
18  import java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  
23  import javax.annotation.Resource;
24  
25  import org.codelibs.core.lang.StringUtil;
26  import org.codelibs.core.misc.DynamicProperties;
27  import org.codelibs.fess.Constants;
28  import org.codelibs.fess.app.web.base.FessAdminAction;
29  import org.codelibs.fess.util.ComponentUtil;
30  import org.codelibs.fess.util.RenderDataUtil;
31  import org.lastaflute.web.Execute;
32  import org.lastaflute.web.response.HtmlResponse;
33  import org.lastaflute.web.response.render.RenderData;
34  import org.lastaflute.web.ruts.process.ActionRuntime;
35  
36  /**
37   * @author Keiichi Watanabe
38   */
39  public class AdminSysteminfoAction extends FessAdminAction {
40  
41      // ===================================================================================
42      //                                                                           Attribute
43      //                                                                           =========
44      @Resource
45      protected DynamicProperties systemProperties;
46  
47      private static final String[] bugReportLabels = { "file.separator", "file.encoding", "java.runtime.version", "java.vm.info",
48              "java.vm.name", "java.vm.vendor", "java.vm.version", "os.arch", "os.name", "os.version", "user.country", "user.language",
49              "user.timezone" };
50  
51      // ===================================================================================
52      //                                                                               Hook
53      //                                                                              ======
54      @Override
55      protected void setupHtmlData(final ActionRuntime runtime) {
56          super.setupHtmlData(runtime);
57          runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameSysteminfo()));
58      }
59  
60      // ===================================================================================
61      //                                                                              Index
62      //                                                                      ==============
63      @Execute
64      public HtmlResponse index() {
65          return asHtml(path_AdminSysteminfo_AdminSysteminfoJsp).renderWith(data -> {
66              registerEnvItems(data);
67              registerPropItems(data);
68              registerFessPropItems(data);
69              registerBugReportItems(data);
70          });
71      }
72  
73      // ===================================================================================
74      //                                                                        Assist Logic
75      //                                                                        ============
76  
77      protected void registerEnvItems(final RenderData data) {
78          RenderDataUtil.register(data, "envItems", getEnvItems());
79      }
80  
81      protected void registerPropItems(final RenderData data) {
82          RenderDataUtil.register(data, "propItems", getPropItems());
83      }
84  
85      protected void registerFessPropItems(final RenderData data) {
86          RenderDataUtil.register(data, "fessPropItems", getFessPropItems());
87      }
88  
89      protected void registerBugReportItems(final RenderData data) {
90          RenderDataUtil.register(data, "bugReportItems", getBugReportItems());
91      }
92  
93      public static List<Map<String, String>> getEnvItems() {
94          final List<Map<String, String>> itemList = new ArrayList<>();
95          for (final Map.Entry<String, String> entry : System.getenv().entrySet()) {
96              itemList.add(createItem(entry.getKey(), entry.getValue()));
97          }
98          return itemList;
99      }
100 
101     public static List<Map<String, String>> getPropItems() {
102         final List<Map<String, String>> itemList = new ArrayList<>();
103         for (final Map.Entry<Object, Object> entry : System.getProperties().entrySet()) {
104             itemList.add(createItem(entry.getKey(), entry.getValue()));
105         }
106         return itemList;
107     }
108 
109     public static List<Map<String, String>> getFessPropItems() {
110         final List<Map<String, String>> itemList = new ArrayList<>();
111         final DynamicProperties systemProperties = ComponentUtil.getSystemProperties();
112         for (final Map.Entry<Object, Object> entry : systemProperties.entrySet()) {
113             itemList.add(createItem(entry.getKey(), entry.getValue()));
114         }
115         return itemList;
116     }
117 
118     public static List<Map<String, String>> getBugReportItems() {
119         final List<Map<String, String>> itemList = new ArrayList<>();
120         for (final String label : bugReportLabels) {
121             itemList.add(createPropItem(label));
122         }
123 
124         final DynamicProperties systemProperties = ComponentUtil.getSystemProperties();
125         for (final Map.Entry<Object, Object> entry : systemProperties.entrySet()) {
126             if (isBugReportTarget(entry.getKey())) {
127                 itemList.add(createItem(entry.getKey(), entry.getValue()));
128             }
129         }
130 
131         return itemList;
132     }
133 
134     private static boolean isBugReportTarget(final Object key) {
135         if ("snapshot.path".equals(key) || "label.value".equals(key)) {
136             return false;
137         }
138         return true;
139     }
140 
141     protected static Map<String, String> createPropItem(final String key) {
142         return createItem(key, System.getProperty(key));
143     }
144 
145     protected static Map<String, String> createItem(final Object label, final Object value) {
146         final Map<String, String> map = new HashMap<>(2);
147         map.put(Constants.ITEM_LABEL, label != null ? label.toString() : StringUtil.EMPTY);
148         map.put(Constants.ITEM_VALUE, value != null ? value.toString() : StringUtil.EMPTY);
149         return map;
150     }
151 
152 }