package com.basic.security.fragment;
|
|
import android.os.Bundle;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.BaseAdapter;
|
import android.widget.Button;
|
import android.widget.EditText;
|
import android.widget.ListView;
|
import android.widget.TextView;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.base.BaseFragment;
|
import com.basic.security.manager.ClusterSerfSyncManager;
|
import com.basic.security.manager.ClusterSettingManager;
|
import com.basic.security.model.ClusterSetting;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.utils.Constants;
|
import com.basic.security.utils.ExceptionUtil;
|
import com.basic.security.utils.ResolutionAdaptation;
|
import com.basic.security.utils.ToastUtil;
|
import com.google.gson.Gson;
|
|
import org.androidannotations.annotations.AfterViews;
|
import org.androidannotations.annotations.Click;
|
import org.androidannotations.annotations.EFragment;
|
import org.androidannotations.annotations.TextChange;
|
import org.androidannotations.annotations.UiThread;
|
import org.androidannotations.annotations.ViewById;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
import androidSync.AndroidSync;
|
|
@EFragment
|
public class ClusterFragment extends BaseFragment {
|
public List<View> allViews = new ArrayList<>();
|
@ViewById
|
Button cluster_search, cluster_save, cluster_join, cluster_exit;
|
@ViewById
|
EditText cluster_name, cluster_id, cluster_password, cluster_ip, node_id, node_name;
|
@ViewById
|
TextView node_id_label, node_name_label, cluster_id_label, cluster_name_label, cluster_password_label, cluster_ip_label;
|
@ViewById
|
ListView lv_device_list;
|
@ViewById
|
View cluster_tab_parent, create_cluster_tab, join_cluster_tab;
|
private DeviceListAdapter deviceListAdapter;
|
private List<Map<String, String>> deviceList = new ArrayList<>();
|
private boolean isCreateCluster = true;
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
return inflater.inflate(ResolutionAdaptation.fragment_cluster1(), container, false);
|
}
|
|
@AfterViews
|
public void afterViews() {
|
lv_device_list.addHeaderView(View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.cluster_setting_list_head(), null));
|
allViews.add(cluster_search);
|
allViews.add(cluster_save);
|
allViews.add(cluster_join);
|
allViews.add(cluster_exit);
|
|
allViews.add(node_id_label);
|
allViews.add(node_name_label);
|
allViews.add(cluster_id_label);
|
allViews.add(cluster_name_label);
|
allViews.add(cluster_password_label);
|
allViews.add(cluster_ip_label);
|
|
allViews.add(node_id);
|
allViews.add(node_name);
|
allViews.add(cluster_id);
|
allViews.add(cluster_name);
|
allViews.add(cluster_password);
|
allViews.add(cluster_ip);
|
hideAllViews();
|
cluster_tab_parent.setVisibility(View.GONE);
|
}
|
|
@UiThread
|
public void queryDeviceListReturn() {
|
if (deviceListAdapter == null) {
|
deviceListAdapter = new DeviceListAdapter();
|
lv_device_list.setAdapter(deviceListAdapter);
|
}
|
deviceListAdapter.notifyDataSetChanged();
|
}
|
|
public void hideAllViews() {
|
for (View view : allViews) {
|
view.setVisibility(View.GONE);
|
}
|
}
|
|
@Click
|
public void create_cluster_tab() {
|
hideAllViews();
|
join_cluster_tab.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_bg_time_rule_add_no_checked);
|
create_cluster_tab.setBackground(null);
|
cluster_tab_parent.setVisibility(View.VISIBLE);
|
cluster_name.setVisibility(View.VISIBLE);
|
cluster_name_label.setVisibility(View.VISIBLE);
|
cluster_password.setVisibility(View.VISIBLE);
|
cluster_password_label.setVisibility(View.VISIBLE);
|
cluster_id.setVisibility(View.VISIBLE);
|
cluster_id_label.setVisibility(View.VISIBLE);
|
cluster_save.setVisibility(View.VISIBLE);
|
}
|
|
@Click
|
public void join_cluster_tab() {
|
hideAllViews();
|
create_cluster_tab.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_bg_time_rule_add_no_checked);
|
join_cluster_tab.setBackground(null);
|
cluster_tab_parent.setVisibility(View.VISIBLE);
|
cluster_ip.setVisibility(View.VISIBLE);
|
cluster_ip_label.setVisibility(View.VISIBLE);
|
cluster_password.setVisibility(View.VISIBLE);
|
cluster_password_label.setVisibility(View.VISIBLE);
|
cluster_search.setVisibility(View.VISIBLE);
|
cluster_join.setVisibility(View.VISIBLE);
|
cluster_id.setVisibility(View.VISIBLE);
|
cluster_id_label.setVisibility(View.VISIBLE);
|
}
|
|
public void manage_cluster_tab() {
|
hideAllViews();
|
cluster_tab_parent.setVisibility(View.GONE);
|
cluster_name.setVisibility(View.VISIBLE);
|
cluster_name_label.setVisibility(View.VISIBLE);
|
cluster_id.setVisibility(View.VISIBLE);
|
cluster_id_label.setVisibility(View.VISIBLE);
|
cluster_password.setVisibility(View.VISIBLE);
|
cluster_password_label.setVisibility(View.VISIBLE);
|
cluster_save.setVisibility(View.VISIBLE);
|
cluster_exit.setVisibility(View.VISIBLE);
|
}
|
|
@UiThread
|
public void show() {
|
super.show();
|
ModelAdapter cluster = ClusterSettingManager.getCluster();
|
cluster_name.setText(cluster.getString(ClusterSetting.cluster_name));
|
cluster_id.setText(cluster.getString(ClusterSetting.cluster_id));
|
String password = cluster.getString(ClusterSetting.password);
|
if (!TextUtils.isEmpty(password)) {
|
try {
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
}
|
cluster_password.setText(password);
|
cluster_ip.setText(cluster.getString(ClusterSetting.other_node_ip));
|
node_id.setText(cluster.getString(ClusterSetting.node_id));
|
node_name.setText(cluster.getString(ClusterSetting.node_name));
|
isCreateCluster = true;
|
deviceListAdapter = new DeviceListAdapter();
|
lv_device_list.setAdapter(deviceListAdapter);
|
if (Constants.FALSE.equals(cluster.getString(ClusterSetting.exit))) {
|
manage_cluster_tab();
|
} else {
|
create_cluster_tab();
|
}
|
}
|
|
@Click
|
public void cluster_search() {
|
BaseApplication.getApplication().executorService.execute(() -> {
|
try {
|
Gson gson = new Gson();
|
String clusterPassword = cluster_password.getText().toString();
|
//12-30 10:50:00.826 20808-20808/com.basic.security.yuyin.indoor I/System.out: ClusterFragment.cluster_search {"PAD97a1cfb8c50c":{"clusterID":"c4d03d5d-64c3-4941-bb53-152277a3271a","nodeID":"PAD97a1cfb8c50c","nodeAddress":"192.168.222.103:30190","isAlive":1}}
|
String clusters = new String(AndroidSync.getClusters("bjbasic123" + clusterPassword));
|
String clusterId = "";
|
if (!"{}".equals(clusters) && clusters.contains("clusterID\":\"")) {
|
int clusterIDIndex = clusters.indexOf("clusterID\":\"");
|
if (clusterIDIndex > 0) {
|
clusterId = clusters.substring(clusterIDIndex + "clusterID\":\"".length());
|
clusterId = clusters.substring(0, clusterId.indexOf("\""));
|
clusterId = clusterId.replace("\"", "");
|
}
|
}
|
if (clusterId.length() > 4) {
|
ToastUtil.show("搜索集群成功");
|
} else {
|
ToastUtil.show("没有搜索集群");
|
}
|
System.out.println("ClusterFragment.cluster_search " + clusters);
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
});
|
}
|
|
@Click
|
public void cluster_save() {
|
cluster_join();
|
}
|
|
@Click
|
public void cluster_join() {
|
ModelAdapter cluster = ClusterSettingManager.cluster;
|
String cluster_name = this.cluster_name.getText().toString().trim();
|
String cluster_id = this.cluster_id.getText().toString().trim();
|
String password = this.cluster_password.getText().toString().trim();
|
String cluster_ip = this.cluster_ip.getText().toString().trim();
|
String node_id = this.node_id.getText().toString().trim();
|
String node_name = this.node_name.getText().toString().trim();
|
if (TextUtils.isEmpty(node_id)) {
|
ToastUtil.show("请输入节点ID");
|
return;
|
}
|
if (TextUtils.isEmpty(node_name)) {
|
ToastUtil.show("请输入节点名称");
|
return;
|
}
|
if (TextUtils.isEmpty(cluster_name)) {
|
ToastUtil.show("请输入集群名称");
|
return;
|
}
|
if (TextUtils.isEmpty(password)) {
|
ToastUtil.show("请输入集群密码");
|
return;
|
}
|
try {
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
cluster.setString(ClusterSetting.cluster_name, cluster_name);
|
cluster.setString(ClusterSetting.cluster_id, cluster_id);
|
cluster.setString(ClusterSetting.password, password);
|
cluster.setString(ClusterSetting.other_node_ip, cluster_ip);
|
cluster.setString(ClusterSetting.exit, Constants.FALSE);
|
ClusterSettingManager.saveCluster(cluster);
|
ToastUtil.show("操作成功");
|
synchronized (ClusterSerfSyncManager.serfQueueLock) {
|
ClusterSerfSyncManager.serfQueue.add("1");
|
ClusterSerfSyncManager.serfQueueLock.notify();
|
}
|
isCreateCluster = false;
|
manage_cluster_tab();
|
}
|
|
@TextChange(com.basic.security.utils.RUtils.R_id_cluster_ip)
|
public void cluster_ip(TextView tv, CharSequence text) {
|
if (TextUtils.isEmpty(text)) {
|
cluster_join.setText("创建集群");
|
} else {
|
cluster_join.setText("加入集群");
|
}
|
}
|
|
@Click
|
public void cluster_exit() {
|
ClusterSettingManager.cluster.setTrue(ClusterSetting.exit);
|
ClusterSettingManager.saveCluster(ClusterSettingManager.cluster);
|
updateDeviceList(new ArrayList<>());
|
synchronized (ClusterSerfSyncManager.serfQueueLock) {
|
ClusterSerfSyncManager.serfQueue.add("exit");
|
ClusterSerfSyncManager.serfQueueLock.notify();
|
}
|
ToastUtil.show("退出集群成功");
|
create_cluster_tab();
|
}
|
|
@UiThread
|
public void updateDeviceList(List<Map<String, String>> availableNodes) {
|
try {
|
if (deviceList != null && deviceListAdapter != null) {
|
if (availableNodes != null) {
|
if (availableNodes.size() == 0 && deviceList.size() == 0) {
|
return;
|
}
|
for (Map<String, String> availableNode : availableNodes) {
|
String nodeIp = availableNode.get("nodeAddress");
|
if (!TextUtils.isEmpty(nodeIp)) {
|
nodeIp = nodeIp.replace(":30190", "");
|
} else {
|
nodeIp = "";
|
}
|
availableNode.put("device_id", availableNode.get("nodeID"));
|
availableNode.put("node_ip", nodeIp);
|
availableNode.put("father_node", "");
|
}
|
deviceList = availableNodes;
|
deviceListAdapter.notifyDataSetChanged();
|
}
|
}
|
} catch (Exception e) {
|
ExceptionUtil.printException(e);
|
}
|
}
|
|
|
private class DeviceListAdapter extends BaseAdapter {
|
public int getCount() {
|
return deviceList == null ? 0 : deviceList.size();
|
}
|
|
public Object getItem(int position) {
|
return deviceList.get(position);
|
}
|
|
public long getItemId(int position) {
|
return position;
|
}
|
|
public View getView(int position, View convertView, ViewGroup parent) {
|
ViewHolder viewHolder;
|
if (convertView == null) {
|
viewHolder = new ViewHolder();
|
convertView = View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.cluster_setting_list_item(), null);
|
viewHolder.deviceID = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_cluster_device_id);
|
viewHolder.IP = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_cluster_ip);
|
viewHolder.fatherClusterName = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_cluster_father_name);
|
convertView.setTag(viewHolder);
|
} else {
|
viewHolder = (ViewHolder) convertView.getTag();
|
}
|
Map<String, String> device = deviceList.get(position);
|
viewHolder.deviceID.setText(device.get("device_id"));
|
viewHolder.IP.setText(device.get("node_ip"));
|
viewHolder.fatherClusterName.setText(device.get("father_node"));
|
return convertView;
|
}
|
|
class ViewHolder {
|
TextView deviceID;
|
TextView IP;
|
TextView fatherClusterName;
|
}
|
}
|
}
|