package com.seventh7.mybatis.dom.converter; import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.intellij.util.xml.ConvertContext; import com.intellij.util.xml.DomElement; import com.seventh7.mybatis.dom.model.IdDomElement; import com.seventh7.mybatis.dom.model.Mapper; import com.seventh7.mybatis.dom.model.ResultMap; import com.seventh7.mybatis.util.MapperUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; /** * @author yanglin */ public class ResultMapConverter extends IdBasedTagConverter{ @NotNull @Override public Collection<? extends IdDomElement> getComparisons(@Nullable Mapper mapper, ConvertContext context) { DomElement invocationElement = context.getInvocationElement(); if (isContextElementOfResultMap(mapper, invocationElement)) { return doFilterResultMapItself(mapper, (ResultMap)invocationElement.getParent()); } else { return mapper.getResultMaps(); } } private boolean isContextElementOfResultMap(Mapper mapper, DomElement invocationElement) { return MapperUtils.isMapperWithSameNamespace(MapperUtils.getMapper(invocationElement), mapper) && invocationElement.getParent() instanceof ResultMap; } private Collection<? extends IdDomElement> doFilterResultMapItself(Mapper mapper, final ResultMap resultMap) { return Collections2.filter(mapper.getResultMaps(), new Predicate<ResultMap>() { @Override public boolean apply(ResultMap input) { return !MapperUtils.getId(input).equals(MapperUtils.getId(resultMap)); } }); } }