buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java
changeset 628 7c4a911dc066
parent 588 c7c26511138f
--- a/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java	Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/metadata/src/com/nokia/helium/metadata/ORMFMPPLoader.java	Fri Aug 13 14:59:05 2010 +0300
@@ -18,277 +18,31 @@
 
 import java.io.File;
 import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
+
+import com.nokia.helium.metadata.fmpp.ORMQueryModeModel;
+
 import fmpp.Engine;
-import fmpp.ProgressListener;
 import fmpp.tdd.DataLoader;
-import freemarker.template.TemplateCollectionModel;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateHashModel;
-import freemarker.template.TemplateSequenceModel;
-import freemarker.template.SimpleScalar;
-import freemarker.template.SimpleNumber;
-import freemarker.template.TemplateModelIterator;
-import com.nokia.helium.jpa.ORMReader;
-import org.apache.log4j.Logger;
-import freemarker.ext.beans.BeanModel;
-import freemarker.ext.beans.BeansWrapper;
-
 
 
 /**
- * Utility class to access the data from the database and used by FMPP
- * templates.
+ * Utility class to access the data from the database and used by FMPP templates.
  */
 public class ORMFMPPLoader implements DataLoader {
     //private ResultSet rs;
-    private static final int READ_LIMIT = 20000;
-
-    private static Logger log = Logger.getLogger(ORMFMPPLoader.class);
-
-    private ORMReader reader;
-
 
     /**
+     * Return a object abstracting the access to a database.
      * @see fmpp.tdd.DataLoader#load(fmpp.Engine, java.util.List)
      */
+    @SuppressWarnings("unchecked")
     public Object load(Engine engine, List args) throws Exception {
         //log.debug("args.size:" + args.size());
-        java.util.ListIterator iter = args.listIterator();
-        int argsSize = args.size();
-        if (argsSize < 1) {
-            throw new Exception("Input DB path should be provided to load into FMPP.");
-        }        
-        ORMQueryModeModel model = new ORMQueryModeModel((String) (args.get(0)));
+        if (args.size() < 1) {
+            throw new MetadataException("The database path should be provided to load into FMPP.");
+        }
+        ORMQueryModeModel model = new ORMQueryModeModel(new File((String)args.get(0)));
         engine.setAttribute(this.getClass().toString(), model);
         return model;
     }
-
-    /**
-     * QueryModel (which supports hash, sequence, containers)
-     * arg[0] - dbpath
-     *  
-     */
-    private class ORMQueryModeModel implements TemplateHashModel, ProgressListener {
-
-        private String dbPath;
-        public ORMQueryModeModel(String path) {
-            File actualPath = new File(path);
-            String fileName = actualPath.getName();
-            dbPath = new File(actualPath.getParent(), fileName.toLowerCase()).getPath();
-        }
-        
-        /*
-         * Gets the template model for the corresponding query
-         * @param query for which the model is returned.
-         * @return returns the template model for the query 
-         */
-        public QueryTemplateModel get(String mode) {
-            String retType = null;
-            String actualMode = mode;
-            //log.debug("mode: " + mode);
-            if (mode.startsWith("native")) {
-                String [] splitString = mode.split(":");
-                if (splitString.length == 2 ) {
-                    actualMode = splitString[0]; 
-                    retType = splitString[1];
-                    //log.debug("actualMode " + actualMode);
-                    //log.debug("retType " + retType);
-                }
-            }
-            
-            return new QueryTemplateModel(dbPath, actualMode, retType);
-        }
-        
-        public boolean isEmpty() {
-            return false;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void notifyProgressEvent(Engine engine, int event, File src,
-                int pMode, Throwable error, Object param) throws Exception {
-            //if (event == ProgressListener.EVENT_END_PROCESSING_SESSION) {
-            //    log.debug("notifyProgressEvent - finalizeORM");
-            //    ORMUtil.finalizeORM(dbPath);
-            //}  
-         }
-    }
-
-    /*
-     * Internal class to handle the sql query and returns the data in either
-     * hash or sequence or containers.
-     */
-    private class QueryTemplateModel implements TemplateHashModel {
-
-        private String dbPath;
-        
-        private String queryMode;
-        
-        private String returnType;
-        
-        private TemplateModel resultObject;
-        
-        public QueryTemplateModel(String path, String mode, String retType) {
-            dbPath = path;
-            queryMode = mode;
-            returnType = retType;
-        }
-
-        public TemplateModel get(String query) {
-            //log.debug("QueryTemplateModel: query" + query);
-            if (queryMode.equals("jpasingle")) {
-                //log.debug("query executing with single result mode");
-                resultObject = getModel(dbPath, query, returnType);
-                
-            } else {
-                //log.debug("query executing with multiple result mode");
-                resultObject = new ORMQueryModel(dbPath, query, queryMode, returnType); 
-            }
-            return resultObject;
-        }
-        
-        private TemplateModel getModel(String dbPath, String query, 
-                String returnType) {
-            ORMReader reader = new ORMReader(dbPath);
-            ORMSequenceModel model = new ORMSequenceModel(reader.executeSingleResult(query, returnType));
-            reader.close();
-            return model;
-        }
-
-        public boolean isEmpty() {
-            //log.debug("query hash isempty:");
-            return false;
-        }
-    }
-    
-    private class ORMSequenceModel implements TemplateSequenceModel {
-        private List ormList = new ArrayList();
-
-        @SuppressWarnings("unchecked")
-        public ORMSequenceModel(Object obj) {
-            ormList.add(obj);
-        }
-        public int size() {
-            return ormList.size();
-        }
-
-        public TemplateModel get(int index) {
-            //log.debug("ORMSequenceModel.get: index: " + index);
-            if (index < ormList.size()) {
-                Object obj = ormList.get(index);
-                if (obj instanceof String) {
-                    return new SimpleScalar((String)obj);
-                } else if (obj instanceof Number) {
-                    return new SimpleNumber((Number)obj);
-                } else if (obj == null) {
-                    return null;
-                } else {
-                    return new ORMObjectModel(obj);
-                }
-            }
-            return null;
-        }
-    }
-    
-    private class ORMQueryModel implements TemplateCollectionModel 
-         {
-        
-        private ORMReader ormReader;
-        private String queryType;
-        private String query;
-        private String returnType;
-
-        public ORMQueryModel(String dbPath, String queryString, String type, String retType) {
-            ormReader = new ORMReader(dbPath);
-            queryType = type;
-            query = queryString;
-            returnType = retType;
-            //log.debug("ORMQueryModel: query" + query);
-        }
-        
-        /*
-         * Provides data via collection interface.
-         * @return the iterator model from which the data is accessed.
-         */
-        public TemplateModelIterator iterator() {
-            //log.debug("iterator constructor called");
-            return new ORMTemplateModelIterator(ormReader, query, queryType, returnType);
-        }
-        
-    }
-
-    /*
-     * Internal Iterator class which provides data as collection. 
-     */
-    private class ORMTemplateModelIterator implements TemplateModelIterator {
-        
-        private String query;
-        private List<Map<String, Object>> rowList;
-        private int currentOffsetIndex;
-        private boolean finished;
-        private String returnType;
-        private boolean nativeQuery;
-        private ORMReader ormReader;
-        
-        public ORMTemplateModelIterator(ORMReader reader, String queryString, String type, String retType) {
-            ormReader = reader;
-            query = queryString;
-            returnType = retType;
-            if (type.startsWith("native")) {
-                nativeQuery = true;
-            }
-            //log.debug("ORMTemplateModelIterator: query" + query);
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @SuppressWarnings("unchecked")
-        public TemplateModel next() {
-            //log.debug("ORMTemplateModelIterator: next");
-            Object toRet = null;
-                if (rowList != null) {
-                    toRet = rowList.remove(0);
-                }
-                if (nativeQuery && returnType.equals("java.lang.String")) {
-                    return new SimpleScalar((java.lang.String)toRet);
-                }
-                return new ORMObjectModel(toRet);
-        }
-        
-        /**
-         * {@inheritDoc}
-         */
-        @SuppressWarnings("unchecked")
-        public boolean hasNext() {
-            if (rowList == null  || rowList.size() == 0) {
-                if (!finished) {
-                    if (nativeQuery) {
-                        if (returnType.equals("java.lang.String")) {
-                            rowList = ormReader.executeNativeQuery(query, null);
-                        } else {
-                            rowList = ormReader.executeNativeQuery(query, returnType);
-                        }
-                    } else {
-                        rowList = ormReader.executeQuery(query);
-                    }
-                    if (rowList == null || rowList.size() == 0) {
-                        finished = true;
-                        ormReader.close();
-                    }
-                }
-            }
-            return !finished;
-        }
-    }
-    
-    private class ORMObjectModel extends BeanModel {
-        public ORMObjectModel(Object obj) {
-            super(obj, new BeansWrapper());
-        }
-    }
 }
\ No newline at end of file