/*******************************************************************************
* Copyright (c) 2014 Imperial College London
* 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:
* Raul Castro Fernandez - initial API and implementation
******************************************************************************/
package uk.ac.imperial.lsds.java2sdg.bricks.SDG;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.function.ToDoubleFunction;
import java.util.function.ToIntFunction;
import java.util.function.ToLongFunction;
public class PartialSDGWrapper implements Comparator<PartialSDGWrapper>{
private final int id;
private final int partialSDGId;
private Set<Integer> stateIds;
private List<OperatorBlock> partialSDG;
private int partialSDGDepth;
private PartialSDGWrapper(){
this.id = -1;
this.partialSDGId = -1;
}
public PartialSDGWrapper(List<OperatorBlock> partialSDG, int id){
this.id = id;
this.partialSDG = partialSDG;
this.partialSDGId = partialSDG.get(0).getWorkflowId();
this.partialSDGDepth = partialSDG.size();
this.stateIds = new HashSet<Integer>();
for(OperatorBlock ob : partialSDG){
int stateId = ob.getStateId();
if(stateId != -1){ // We want to ignore this case
stateIds.add(ob.getStateId());
}
}
}
public int getId(){
return id;
}
public int getPartialSDGId(){
return partialSDGId;
}
public boolean containsState(int stateId){
return stateIds.contains(stateId);
}
public Set<Integer> getSet(){
return stateIds;
}
public List<OperatorBlock> getPartialSDG(){
return partialSDG;
}
public int getDepth(){
return partialSDGDepth;
}
public void addStateReferencesOf(PartialSDGWrapper partialSDG){
for(Integer sId : partialSDG.stateIds){
this.stateIds.add(sId);
}
}
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("ID: "+this.id+"\n");
sb.append("Depth: "+this.partialSDGDepth+"\n");
StringBuilder sb2 = new StringBuilder();
sb2.append("[");
for(Integer sid : stateIds){
sb2.append(sid+",");
}
sb2.append("]");
sb.append(sb2.toString()+"\n");
return sb.toString();
}
@Override
public int compare(PartialSDGWrapper o1, PartialSDGWrapper o2) {
int d1 = o1.getDepth();
int d2 = o2.getDepth();
if(d1 > d2)
return 1;
else if(d1 < d2)
return -1;
else
// If they are equal, it means that there is no order enforced, but the element should anyway added
// So we explicitly impose an order
return -1;
}
public static Comparator<PartialSDGWrapper> getComparator(){
return new PartialSDGWrapper();
}
/*
* pgaref
* New Methods start here!!
*
*/
@Override
public Comparator<PartialSDGWrapper> reversed() {
// TODO Auto-generated method stub
return null;
}
@Override
public Comparator<PartialSDGWrapper> thenComparing(
Comparator<? super PartialSDGWrapper> other) {
// TODO Auto-generated method stub
return null;
}
@Override
public <U> Comparator<PartialSDGWrapper> thenComparing(
Function<? super PartialSDGWrapper, ? extends U> keyExtractor,
Comparator<? super U> keyComparator) {
// TODO Auto-generated method stub
return null;
}
@Override
public <U extends Comparable<? super U>> Comparator<PartialSDGWrapper> thenComparing(
Function<? super PartialSDGWrapper, ? extends U> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
@Override
public Comparator<PartialSDGWrapper> thenComparingInt(
ToIntFunction<? super PartialSDGWrapper> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
@Override
public Comparator<PartialSDGWrapper> thenComparingLong(
ToLongFunction<? super PartialSDGWrapper> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
@Override
public Comparator<PartialSDGWrapper> thenComparingDouble(
ToDoubleFunction<? super PartialSDGWrapper> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
// TODO Auto-generated method stub
return null;
}
public static <T extends Comparable<? super T>> Comparator<T> naturalOrder() {
// TODO Auto-generated method stub
return null;
}
public static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator) {
// TODO Auto-generated method stub
return null;
}
public static <T> Comparator<T> nullsLast(Comparator<? super T> comparator) {
// TODO Auto-generated method stub
return null;
}
public static <T, U> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator) {
// TODO Auto-generated method stub
return null;
}
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
public static <T> Comparator<T> comparingInt(
ToIntFunction<? super T> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
public static <T> Comparator<T> comparingLong(
ToLongFunction<? super T> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
public static <T> Comparator<T> comparingDouble(
ToDoubleFunction<? super T> keyExtractor) {
// TODO Auto-generated method stub
return null;
}
}