/*
* Copyright 2011 Alibaba.com All right reserved. This software is the
* confidential and proprietary information of Alibaba.com ("Confidential
* Information"). You shall not disclose such Confidential Information and shall
* use it only in accordance with the terms of the license agreement you entered
* into with Alibaba.com.
*/
package com.alibaba.dubbo.governance.web.governance.module.screen;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.alibaba.dubbo.governance.service.ConsumerService;
import com.alibaba.dubbo.governance.service.ProviderService;
import com.alibaba.dubbo.governance.web.common.module.screen.Restful;
/**
* Providers.
* URI: /services/$service/providers
*
* @author william.liangf
*/
public class Addresses extends Restful {
@Autowired
private ProviderService providerService;
@Autowired
private ConsumerService consumerService;
public void index(Map<String, Object> context) {
String application = (String) context.get("application");
String service = (String) context.get("service");
List<String> providerAddresses = null;
List<String> consumerAddresses = null;
if (application != null && application.length() > 0) {
providerAddresses = providerService.findAddressesByApplication(application);
consumerAddresses = consumerService.findAddressesByApplication(application);
} else if (service != null && service.length() > 0) {
providerAddresses = providerService.findAddressesByService(service);
consumerAddresses = consumerService.findAddressesByService(service);
}
else {
providerAddresses = providerService.findAddresses();
consumerAddresses = consumerService.findAddresses();
}
Set<String> addresses = new TreeSet<String>();
if (providerAddresses != null) {
addresses.addAll(providerAddresses);
}
if (consumerAddresses != null) {
addresses.addAll(consumerAddresses);
}
context.put("providerAddresses", providerAddresses);
context.put("consumerAddresses", consumerAddresses);
context.put("addresses", addresses);
if (context.get("service") == null
&& context.get("application") == null
&& context.get("address") == null) {
context.put("address", "*");
}
String keyword = (String) context.get("keyword");
if (StringUtils.isNotEmpty(keyword)) {
if("*".equals(keyword)) return;
keyword = keyword.toLowerCase();
Set<String> newList = new HashSet<String>();
Set<String> newProviders = new HashSet<String>();
Set<String> newConsumers = new HashSet<String>();
for (String o : addresses) {
if (o.toLowerCase().indexOf(keyword) != -1) {
newList.add(o);
}
}
for (String o : providerAddresses) {
if (o.toLowerCase().indexOf(keyword) != -1) {
newProviders.add(o);
}
}
for (String o : consumerAddresses) {
if (o.toLowerCase().indexOf(keyword) != -1) {
newConsumers.add(o);
}
}
context.put("addresses", newList);
context.put("providerAddresses", newProviders);
context.put("consumerAddresses", newConsumers);
}
}
public void search(Map<String, Object> context) {
index(context);
Set<String> newList = new HashSet<String>();
@SuppressWarnings("unchecked")
Set<String> list = (Set<String>)context.get("addresses");
String keyword = (String) context.get("keyword");
if(StringUtils.isNotEmpty(keyword)){
keyword = keyword.toLowerCase();
for(String o : list){
if(o.toLowerCase().indexOf(keyword)!=-1){
newList.add(o);
}
}
}
context.put("addresses", newList);
}
}