summaryrefslogtreecommitdiff
path: root/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java
diff options
context:
space:
mode:
Diffstat (limited to 'orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java')
-rw-r--r--orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java206
1 files changed, 206 insertions, 0 deletions
diff --git a/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java b/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java
new file mode 100644
index 0000000..26a3746
--- /dev/null
+++ b/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java
@@ -0,0 +1,206 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+/**
+ *
+ */
+package net.sf.oreka.services;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+import net.sf.oreka.Direction;
+import net.sf.oreka.HibernateManager;
+import net.sf.oreka.persistent.RecSegment;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.ScrollableResults;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+
+public class RecSegmentServiceHbn implements RecSegmentService{
+
+ private boolean firstCriterium = true;
+
+ static Logger logger = Logger.getLogger(RecSegmentServiceHbn.class);
+ /**
+ *
+ */
+ public RecSegmentServiceHbn() {
+
+ }
+
+// private void addCriteriumPrefix (StringBuffer query) {
+// if(firstCriterium){
+// query.append(" where ");
+// firstCriterium = false;
+// }
+// else {
+// query.append(" and ");
+// }
+// }
+
+ public int getResults(RecSegmentFilter filter, int offset, int number, String orderBy, boolean ascending, List results)
+ {
+ firstCriterium = true;
+ int numResults = 0;
+ logger.log(Level.DEBUG, "Entering getResults");
+ //logger.log(Level.INFO, System.getProperty("java.class.path"));
+
+ //RecSegment seg1 = new RecSegment();
+ //RecSegment seg2 = new RecSegment();
+
+ //RecTape tape1 = new RecTape();
+ //RecTape tape2 = new RecTape();
+ /*
+ RecSegmentResult result1 = new RecSegmentResult();
+ RecSegmentResult result2 = new RecSegmentResult();
+
+ result1.getRecSegment().setDuration(10);
+ result1.getRecSegment().setLocalParty("01223");
+ results.add(result1);
+ result2.getRecSegment().setDuration(11);
+ result2.getRecSegment().setLocalParty("01440");
+ results.add(result2);
+*/
+ /*
+ for (int i=0; i<number; i++)
+ {
+ RecSegmentResult result = new RecSegmentResult();
+ result.getRecSegment().setDuration(offset + i);
+ result.getRecSegment().setLocalParty(orderBy);
+ result.getRecTape().setId(ascending ? 0:1);
+ results.add(result);
+ }
+ numResults = 502;
+ */
+
+ Transaction tx = null;
+ Session session = null;
+ try
+ {
+ session = HibernateManager.getSession();
+
+ StringBuffer queryString = new StringBuffer("from RecSegment as seg left join seg.recTape as tape left join tape.service as srv ");
+ //StringBuffer queryString = new StringBuffer("from RecSegment as seg ");
+
+ //boolean firstCriterium = false;
+
+ queryString.append(" where seg.timestamp between :startDate and :endDate ");
+
+ if(filter.getLocalParty().length() > 0) {
+ queryString.append(" and seg.localParty=:localParty ");
+ }
+ if(filter.getRemoteParty().length() > 0) {
+ queryString.append(" and seg.remoteParty=:remoteParty ");
+ }
+ if(filter.getMinDuration().length() > 0) {
+ queryString.append(" and seg.duration>:minDuration ");
+ }
+ if(filter.getMaxDuration().length() > 0) {
+ queryString.append(" and seg.duration<:maxDuration ");
+ }
+ if(filter.getDirection() != Direction.ALL){
+ queryString.append(" and seg.direction=:direction ");
+ }
+
+ if(orderBy.length() == 0) {
+ orderBy = "seg.timestamp";
+ }
+ queryString.append(" order by ");
+ queryString.append(orderBy);
+ if (ascending) {
+ queryString.append(" asc");
+ }
+ else {
+ queryString.append(" desc");
+ }
+
+ Query query = session.createQuery(queryString.toString());
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+ logger.debug("Filter start date:" + dateFormat.format(filter.getStartDate()));
+ query.setTimestamp("startDate", filter.getStartDate());
+ logger.debug("Filter end date:" + dateFormat.format(filter.getEndDate()));
+ query.setTimestamp("endDate", filter.getEndDate());
+
+
+ if(filter.getLocalParty().length() > 0) {
+ query.setString("localParty", filter.getLocalParty());
+ }
+ if(filter.getRemoteParty().length() > 0) {
+ query.setString("remoteParty", filter.getRemoteParty());
+ }
+ if(filter.getMinDuration().length() > 0) {
+ query.setString("minDuration", filter.getMinDuration());
+ }
+ if(filter.getMaxDuration().length() > 0) {
+ query.setString("maxDuration", filter.getMaxDuration());
+ }
+ if(filter.getDirection() != Direction.ALL){
+ query.setParameter( "direction", filter.getDirection().ordinal() );
+ //query.setParameter( "direction", filter.getDirection().name() );
+ }
+
+// Criteria crit = session.createCriteria(RecSegment.class);
+// //crit.setFetchMode("RecTape",FetchMode.EAGER);
+// crit.setFetchMode(null, FetchMode.LAZY);
+
+ ScrollableResults scrollDocs = query.scroll();
+
+
+ if ( scrollDocs.last() ) {
+ numResults = scrollDocs.getRowNumber()+1;
+ logger.debug("Num res:" + numResults);
+ }
+
+ //scrollDocs.beforeFirst();
+ scrollDocs.setRowNumber(offset);
+ int rowsSoFar = 0;
+
+ while (scrollDocs.get()!= null && rowsSoFar<number)
+ {
+ rowsSoFar++;
+ RecSegment seg = (RecSegment)scrollDocs.get(0);
+
+ //logger.log(Level.ERROR, seg.getRecTape().getUrl());
+
+ //RecTape tape = (RecTape)scrollDocs.get(1);
+ //RecTape tape = new RecTape();
+ RecSegmentResult res = new RecSegmentResult();
+ res.setRecSegment(seg);
+ //res.setRecTape(tape);
+ results.add(res);
+ scrollDocs.next();
+ }
+ }
+ catch ( HibernateException he ) {
+ if ( tx != null ) tx.rollback();
+ logger.log(Level.ERROR, he.toString());
+ he.printStackTrace();
+ }
+ catch (Exception e)
+ {
+ logger.error(e);
+ e.printStackTrace();
+ }
+ finally {
+ session.close();
+ }
+ return numResults;
+ }
+
+}