2013-05-20 18:50:24 +02:00
/ * *
2017-03-20 14:43:11 +01:00
*
2013-05-20 18:50:24 +02:00
* /
package org.gcube.portlets.user.speciesdiscovery.client ;
import java.util.ArrayList ;
import java.util.List ;
import javax.persistence.EntityManager ;
import javax.persistence.EntityManagerFactory ;
import javax.persistence.Query ;
import javax.persistence.TypedQuery ;
import org.gcube.application.framework.core.session.ASLSession ;
import org.gcube.application.framework.core.session.SessionManager ;
2013-10-07 14:40:14 +02:00
import org.gcube.common.scope.impl.ScopeBean ;
2013-05-20 18:50:24 +02:00
import org.gcube.portlets.user.speciesdiscovery.server.persistence.DaoSession ;
import org.gcube.portlets.user.speciesdiscovery.shared.ResultRow ;
2017-03-20 14:43:11 +01:00
import org.gcube.portlets.user.speciesdiscovery.shared.SessionExpired ;
2013-05-20 18:50:24 +02:00
import org.gcube.portlets.user.speciesdiscovery.shared.TaxonomyRow ;
/ * *
* @author " Federico De Faveri defaveri@isti.cnr.it "
*
* /
public class H2TestResultItemRetrievingAndConverting {
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
private static final int MAX_ELEMENTS = 20 ;
static String sessionID = " 1 " ;
static String user = " test.user " ;
2013-10-07 14:40:14 +02:00
static ScopeBean scope ;
2013-05-20 18:50:24 +02:00
static ASLSession session ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
public static void main ( String [ ] args ) throws Exception
{
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
session = SessionManager . getInstance ( ) . getASLSession ( sessionID , user ) ;
2013-10-07 14:40:14 +02:00
scope = new ScopeBean ( " /gcube/devsec " ) ;
2013-05-20 18:50:24 +02:00
session . setScope ( scope . toString ( ) ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
EntityManagerFactory factory = DaoSession . getEntityManagerFactory ( session ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
EntityManager em = factory . createEntityManager ( ) ;
// ScopeProvider.instance.set("/gcube/devsec");
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
int removed ;
String tableName ;
List < ResultRow > list ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// String tableName = "ParentTaxonomyRow";
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// List<ResultRow> list = getList(em, tableName);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println("list "+tableName+ "size is "+list.size());
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// em = factory.createEntityManager();
// removed = removeAll(em, tableName);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println("removed " +removed);
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
tableName = " ResultRow " ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
em = factory . createEntityManager ( ) ;
list = getList ( em , tableName ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
System . out . println ( " list " + tableName + " size is " + list . size ( ) ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// removeAll(em, "ParentTaxonomyRow");
// em = factory.createEntityManager();
// removed = removeAll(em, tableName);
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// System.out.println("removed " +removed);
// SpeciesService taxonomyService = new SpeciesService(scope, session);
long start = System . currentTimeMillis ( ) ;
long last = System . currentTimeMillis ( ) ;
int counter = 0 ;
// CloseableIterator<ResultElement> input = taxonomyService.searchByQuery("'sarda sarda' as ScientificName return Taxon");// searchByFilters(searchTerm, SearchTypeEnum.BY_SCIENTIFIC_NAME, searchFilters);
// SearchFilters searchFilters = new SearchFilters();
// searchFilters.setResultType(SpeciesCapability.TAXONOMYITEM);
// SearchResultType resultType = QueryUtil.getResultType(searchFilters);
// CloseableIterator<FetchingElement> output = IteratorChainBuilder.buildChain(input, resultType, session);
//
// FetchingSession<TaxonomyRow> fetchingSession = (FetchingSession<TaxonomyRow>) FetchingSessionUtil.createFetchingSession(output, resultType, session);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// while(!fetchingSession.isComplete()) {
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println((System.currentTimeMillis()-start)+" buffer size "+fetchingSession.getBufferSize());
// last = System.currentTimeMillis();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// Thread.sleep(1000);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println("COMPLETE: "+(System.currentTimeMillis()-last)+"ms from last item to close the stream; buffer size "+fetchingSession.getBufferSize());
//
// System.out.println(fetchingSession.getBufferSize() + " results in "+(System.currentTimeMillis()-start)+"ms total; "+(last-start)+"ms from first to last result");
// }
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// System.out.println("Start time: "+last);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// while(output.hasNext()) {
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println((System.currentTimeMillis()-last)+"ms "+output.next());
// last = System.currentTimeMillis();
// counter++;
// }
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// Stream<ResultElement> input = taxonomyService.searchByQuery2("'sarda sarda' as ScientificName return Taxon");
// //from ResultItem to ResultRow
//// List<ResultItem> listElements = new ArrayList<ResultItem>();
//// List<ResultRow> listRR = new ArrayList<ResultRow>();
//// ResultItemConverter converter = new ResultItemConverter(session);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// TaxonomyItemConverter converter = new TaxonomyItemConverter(session);
// List<TaxonomyRow> listRR = new ArrayList<TaxonomyRow>();
// List<TaxonomyItem> listElements = new ArrayList<TaxonomyItem>();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// while(input.hasNext()) {
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
//// ResultItem result = (ResultItem) input.next();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// TaxonomyItem result = (TaxonomyItem) input.next();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println((System.currentTimeMillis()-last)+" ms to recover "+result);
// last = System.currentTimeMillis();
// counter++;
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// listElements.add(result);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// listRR.add(converter.convert(result));
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println((System.currentTimeMillis()-last)+" ms to convert "+result);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// if(MAX_ELEMENTS == counter)
// break;
// }
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// input.close();
//
// counter = 0;
// start = System.currentTimeMillis();
// last = System.currentTimeMillis();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
//// for (ResultRow resultRow : listRR) {
// for (TaxonomyRow resultRow : listRR) {
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println(counter + ")" + (System.currentTimeMillis()-last)+" ms "+resultRow);
// last = System.currentTimeMillis();
2017-03-20 14:43:11 +01:00
//
//
2013-05-20 18:50:24 +02:00
// try{
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
//// storeTaxonParents(resultRow);
//// storeCommonName(listElements.get(counter), resultRow);
// storeRR(resultRow);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// }catch (Exception e) {
// e.printStackTrace();
// }
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// if(counter==50)
// break;
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// counter++;
// }
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// System.out.println("BUFFER SIZE: " + fetchingSession.getBuffer().getList().size());
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// System.out.println("COMPLETE: "+(System.currentTimeMillis()-last)+" ms from last item to close the stream");
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// System.out.println(counter + " results in "+(System.currentTimeMillis()-start)+" ms total; "+(last-start)+" ms from first to last result");
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
List < String > listServiceId = new ArrayList < String > ( ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
int i = 0 ;
for ( ResultRow rr : list ) {
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
listServiceId . add ( rr . getIdToString ( ) ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
System . out . println ( + + i + " )listserviceId " + listServiceId ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
if ( i = = 30 )
break ;
}
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
em = factory . createEntityManager ( ) ;
String queryStr = " select t from ResultRow t where t. " + ResultRow . ID_FIELD + " IN :inclList " ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
TypedQuery < ResultRow > query2 = em . createQuery ( queryStr , ResultRow . class ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
query2 . setParameter ( " inclList " , listServiceId ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
// query.setFirstResult(2);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// query.setMaxResults(5);
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
start = System . currentTimeMillis ( ) ;
List < ResultRow > results = query2 . getResultList ( ) ;
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
i = 0 ;
for ( ResultRow r : results ) {
System . out . println ( " ResultRow query " + + + i + " ) " + r ) ;
}
// ExpressionBuilder expression = new ExpressionBuilder(Taxon.class);
// expression.get(Taxon.RANK).equalsIgnoreCase("class");
//
//
// CriteriaBuilder cb = em.getCriteriaBuilder();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// // Query for a List of objects.
//// CriteriaQuery<Object> cq = cb.createQuery();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// CriteriaQuery<Taxon> cq = cb.createQuery(Taxon.class);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// Root<Taxon> e = cq.from(Taxon.class);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// cq.where(cb.equal(e.get(Taxon.RANK), "class"));
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// query = em.createQuery(cq);
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// List<Taxon> result = query.getResultList();
2017-03-20 14:43:11 +01:00
//
2013-05-20 18:50:24 +02:00
// for (Taxon taxon : result) {
// System.out.println("taxon: " + taxon);
// }
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
}
2017-03-20 14:43:11 +01:00
protected static void storeRR ( TaxonomyRow row ) throws SessionExpired , Exception {
2013-05-20 18:50:24 +02:00
EntityManagerFactory factory = DaoSession . getEntityManagerFactory ( session ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
EntityManager em = factory . createEntityManager ( ) ;
2017-03-20 14:43:11 +01:00
em . getTransaction ( ) . begin ( ) ;
2013-05-20 18:50:24 +02:00
em . persist ( row ) ;
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
em . getTransaction ( ) . commit ( ) ;
em . close ( ) ;
}
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
public static int removeAll ( EntityManager em , String tableName ) {
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
int removed = 0 ;
try {
em . getTransaction ( ) . begin ( ) ;
removed = em . createQuery ( " DELETE FROM " + tableName ) . executeUpdate ( ) ;
em . getTransaction ( ) . commit ( ) ;
System . out . println ( " DELETE FROM " + tableName + " " + removed + " items " ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
} finally {
em . close ( ) ;
}
return removed ;
}
2017-03-20 14:43:11 +01:00
2013-05-20 18:50:24 +02:00
public static List < ResultRow > getList ( EntityManager em , String tableName ) {
List < ResultRow > listResultRow = new ArrayList < ResultRow > ( ) ;
try {
Query query = em . createQuery ( " select t from " + tableName + " t " ) ;
listResultRow = query . getResultList ( ) ;
} finally {
em . close ( ) ;
}
return listResultRow ;
}
}