Package com.onpositive.gae.baseviewer.requests

Source Code of com.onpositive.gae.baseviewer.requests.AndRequest

package com.onpositive.gae.baseviewer.requests;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

import org.eclipse.core.runtime.IProgressMonitor;

import com.onpositive.gae.baseviewer.BaseDataFacade.Callback;

public class AndRequest implements IComplexQueryRequest {

  private HashSet<IComplexQueryRequest> toAnd;
  private boolean completed;
  private boolean allcompleted;
  private boolean cancelled;

  public AndRequest(IComplexQueryRequest... q) {
    toAnd = new HashSet<IComplexQueryRequest>(Arrays.asList(q));
  }

  public AndRequest(HashSet<IComplexQueryRequest> q) {
    toAnd = q;
  }

 
  public void execute(IComplexFacade facade, Callback cb,
      IProgressMonitor monitor) {
    final HashMap<IComplexQueryRequest, HashSet<Object>> z = new HashMap<IComplexQueryRequest, HashSet<Object>>();
    for (final IComplexQueryRequest q : toAnd) {
      z.put(q, new HashSet<Object>());
      if (cancelled){
        return;
      }
      q.execute(facade, new Callback() {

       
        public boolean objectFetched(Object object) {
          synchronized (z) {
            HashSet<Object> hashSet = z.get(q);
            hashSet.add(object);
          }
          return false;
        }
      }, monitor);
    }
    if (cancelled){
      return;
    }
    l2: while (true) {
      sleep();
      if (cancelled){
        return;
      }
      for (final IComplexQueryRequest q : toAnd) {
        if (!q.isCompleted()) {
          continue l2;
        }
      }
      break;
    }
    allcompleted = true;
    for (final IComplexQueryRequest q : toAnd) {
      allcompleted &= q.isAllResultsCompleted();
    }
    IComplexQueryRequest q = toAnd.iterator().next();
    HashSet<Object> hashSet = z.get(q);
    l2: for (Object o : hashSet) {
      if (cancelled){
        return;
      }
      for (final IComplexQueryRequest q1 : toAnd) {
        if (q != q1) {
          if (!z.get(q1).contains(o)) {
            continue l2;
          }
        }
      }
      cb.objectFetched(o);
    }
    completed = true;
  }

  void sleep() {
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
    }
  }

 
  public boolean isAllResultsCompleted() {
    return allcompleted;
  }

 
  public boolean isCompleted() {
    return completed;
  }

 
  public void cancel() {
    cancelled=true;
    for (final IComplexQueryRequest q : toAnd) {
      q.cancel();
    }
  }

 
  public void filter(HashSet<Object> r) {
    // TODO Auto-generated method stub
   
  }
}
TOP

Related Classes of com.onpositive.gae.baseviewer.requests.AndRequest

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.