/*******************************************************************************
 * Copyright 2015 InfinitiesSoft Solutions Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *******************************************************************************/
package com.infinities.skyport.compute.entity.comparator;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.dasein.cloud.Taggable;

import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Ordering;

public class TaggableComparator implements Comparator<Taggable> {

	@Override
	public int compare(Taggable o1, Taggable o2) {
		List<String> aTags = convert(o1.getTags());
		List<String> bTags = convert(o2.getTags());
		return ComparisonChain.start().compare(aTags, bTags, Ordering.<String>natural().lexicographical().nullsLast())
				.result();
	}

	private List<String> convert(Map<String, String> tags) {
		List<String> ret = null;
		if (tags != null) {
			ret = new ArrayList<String>();
			for (Entry<String, String> entry : tags.entrySet()) {
				ret.add(entry.getKey() + ":" + entry.getValue());
			}
		}
		return ret;
	}

}
