package templates.views; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.applause.lang.applauseDsl.ComplexProviderConstruction; import org.applause.lang.applauseDsl.ContentProvider; import org.applause.lang.applauseDsl.SectionCell; import org.applause.lang.applauseDsl.TypeDescription; import org.applause.lang.applauseDsl.View; import org.applause.lang.applauseDsl.ViewCall; import org.applause.lang.scoping.TypeUtil; import org.eclipse.xtext.util.Pair; import org.eclipse.xtext.util.Tuples; import com.google.common.collect.Iterables; public class Extensions { private static Pair<View, ContentProvider> key(ViewCall call) { ContentProvider cp = null; if (call.getProvider() instanceof ComplexProviderConstruction) { ComplexProviderConstruction construction = (ComplexProviderConstruction) call.getProvider(); cp = construction.getProvider(); } return Tuples.create(call.getView(), cp); } public static List<ViewCall> withoutConceptionalDuplicates(@SuppressWarnings("rawtypes") List calls) { Set<Pair<View, ContentProvider>> keys = new HashSet<Pair<View,ContentProvider>>(); List<ViewCall> result = new ArrayList<ViewCall>(); for(ViewCall vc : Iterables.filter(calls, ViewCall.class)) if(keys.add(key(vc))) result.add(vc); return result; } private static Pair<String, String> key(SectionCell cell) { TypeDescription textType = org.applause.lang.scoping.TypeUtil.getTypeOf(cell.getText()); TypeDescription cellType = TypeUtil.getTypeOf(cell.getIterator()); System.out.println("Tuple: " + textType.getType().getName() + "::" + cellType.getType().getName()); return Tuples.create(cellType.getType().getName(), textType.getType().getName()); } public static List<SectionCell> uniqueSectionCells(@SuppressWarnings("rawtypes") List cells) { List<SectionCell> result = new ArrayList<SectionCell>(); Set<Pair<String, String>> keys = new HashSet<Pair<String, String>>(); for(SectionCell cell: Iterables.filter(cells, SectionCell.class)) { if(keys.add(key(cell))) { System.out.println("Adding"); result.add(cell); } } return result; } }