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.RadioButton; import android.widget.TextView; 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.ResolutionAdaptation; import com.basic.security.utils.ToastUtil; import com.basic.security.widget.ClusterRoundView; 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; @EFragment public class ClusterFragment extends BaseFragment { @ViewById Button cluster_a, cluster_b, cluster_c, cluster_plus, confirm_save, cancel_save, cluster_add, cluster_exit; @ViewById RadioButton only_allow, no_limit; @ViewById EditText cluster_name, cluster_id, cluster_cookie, cluster_ip, node_id, node_name; @ViewById ClusterRoundView round_view; @ViewById ListView lv_device_list; private DeviceListAdapter deviceListAdapter; private List> 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)); } public void queryDeviceList() { } @UiThread public void queryDeviceListReturn() { if (deviceListAdapter == null) { deviceListAdapter = new DeviceListAdapter(); lv_device_list.setAdapter(deviceListAdapter); } deviceListAdapter.notifyDataSetChanged(); } @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 { // password = new String(Base64.decode(password, Base64.NO_WRAP), "UTF8"); } catch (Exception e) { e.printStackTrace(); } } cluster_cookie.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); } @Click public void cluster_plus() { isCreateCluster = true; } @Click void confirm_save() { 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_cookie.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 { // password = Base64.encodeToString(password.getBytes("UTF-8"), Base64.NO_WRAP); } catch (Exception e) { e.printStackTrace(); } 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(); } } @Click void cancel_save() { } @Click public void cluster_add() { confirm_save(); isCreateCluster = false; } @TextChange(com.basic.security.utils.RUtils.R_id_cluster_ip) public void cluster_ip(TextView tv, CharSequence text) { if (TextUtils.isEmpty(text)) { cluster_add.setText("创建集群"); } else { cluster_add.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("退出集群成功"); } @UiThread public void updateDeviceList(List> availableNodes) { try { if (deviceList != null && deviceListAdapter != null) { if (availableNodes != null) { if (availableNodes.size() == 0 && deviceList.size() == 0) { return; } for (Map 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) { e.printStackTrace(); } } @Click public void search_cluster() { // synchronized (ClusterSerfSyncManager.serfQueueLock) { // ClusterSerfSyncManager.serfQueue.add("search"); // ClusterSerfSyncManager.serfQueueLock.notify(); // } } 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 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; } } }