Package org.eclipse.ecf.tests.provider.dnssd

Source Code of org.eclipse.ecf.tests.provider.dnssd.DnsSdAdvertiserComparator

/*******************************************************************************
* Copyright (c) 2010 Markus Alexander Kuppe.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Markus Alexander Kuppe (ecf-dev_eclipse.org <at> lemmster <dot> de) - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.tests.provider.dnssd;

import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.eclipse.ecf.discovery.IServiceInfo;
import org.xbill.DNS.Record;
import org.xbill.DNS.SRVRecord;
import org.xbill.DNS.TXTRecord;

public class DnsSdAdvertiserComparator implements Comparator {

  private static final int membercount = 5;

  /* (non-Javadoc)
   * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
   */
  public int compare(final Object arg0, final Object arg1) {
    int result = -1;
    if (arg0 instanceof IServiceInfo) {
      final IServiceInfo serviceInfo = (IServiceInfo) arg0;

      if (arg1 instanceof List) {
        result = (serviceInfo.getServiceProperties().size() + membercount) * -1;
       
        final List records = (List) arg1;
        for (final Iterator itr = records.iterator(); itr.hasNext();) {
          final Record record = (Record) itr.next();
          if(record instanceof SRVRecord) {
            result = compareSrvRecord(result, serviceInfo, record);
          } else if(record instanceof TXTRecord) {
            final String[] str = record.rdataToString().split("=");
            final String key = str[0].substring(1);
            final String value = str[1].substring(0, str[1].length() - 1);
            final Object property = serviceInfo.getServiceProperties().getProperty(key);
            if(property != null) {
              result += value.equals(property.toString()) ? 1 : -1;
            } else {
              result += -1;
            }
          }
        }
      } else if(arg1 instanceof SRVRecord) {
        result = compareSrvRecord(-membercount, serviceInfo, (SRVRecord) arg1);
      }
    }
    return result;
  }

  private int compareSrvRecord(int result, final IServiceInfo serviceInfo,
      final Record record) {
    final SRVRecord srvRec = (SRVRecord) record;
    final String name = srvRec.getName().toString();
    final String string = "_" + DnsSdTestHelper.REG_SCHEME + "._" + DnsSdTestHelper.PROTO;
    if(name.startsWith(string)) {
      final String target = srvRec.getTarget().toString();
      result += serviceInfo.getPriority() == srvRec.getPriority() ? 1 : -1;
      result += serviceInfo.getWeight() == srvRec.getWeight() ? 1 : -1;
      result += DnsSdTestHelper.TTL == srvRec.getTTL() ? 1 : -1;
      result += serviceInfo.getLocation().getHost().equals(target.substring(0, target.length() - 1)) ? 1 : -1;
      result += serviceInfo.getLocation().getPort() == srvRec.getPort() ? 1 : -1;
    }
    return result;
  }
}
TOP

Related Classes of org.eclipse.ecf.tests.provider.dnssd.DnsSdAdvertiserComparator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.