/**
* NumeroNameService.java
* Created On 2007, May 3, 2007 10:06:39 PM
* @author E. Rajasekar
*/
package app.astrosoft.service;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import javax.swing.JOptionPane;
import app.astrosoft.consts.Operator;
import app.astrosoft.persistence.JPAUtil;
import app.astrosoft.persistence.NumerologicalName;
import app.astrosoft.ui.comp.NumeroNamePagination;
import app.astrosoft.ui.dlg.OptionDialog;
import app.astrosoft.ui.table.ColumnMetaData;
import app.astrosoft.ui.table.Table;
import app.astrosoft.ui.table.TableData;
import app.astrosoft.ui.table.TableDataFactory;
import app.astrosoft.ui.table.TableRowData;
public class NumeroNameService {
private static final Logger log = Logger.getLogger("app.astrosoft.service");
private static final int exportPageLen = 25;
public static void addName(String name){
addName(new NumerologicalName(name));
}
public static void addName(NumerologicalName numeroName){
EntityManagerFactory emf = JPAUtil.getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
em.persist(numeroName);
tx.commit();
log.log(Level.INFO, "Added Name " + numeroName);
}catch(EntityExistsException e){
log.warning("Name : " + numeroName.getName() + " already exists");
}finally {
em.close();
}
}
public static void deleteNames(List<NumerologicalName> names){
EntityManagerFactory emf = JPAUtil.getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
for(NumerologicalName name : names){
NumerologicalName entity = em.find(NumerologicalName.class, name.getNameId());
em.remove(entity);
log.log(Level.INFO, "Removed Name " + entity);
}
tx.commit();
em.close();
}
public static List queryAllNames(int startIndex, int maxRows){
EntityManager em = JPAUtil.getEntityManagerFactory().createEntityManager();
Query q = em.createNamedQuery(NumerologicalName.FIND_ALL_NAMES);
q.setFirstResult(startIndex);
q.setMaxResults(maxRows);
List names = q.getResultList();
em.close();
return names;
}
public static TableData<NumerologicalName> findAllNames(int startIndex, int maxRows){
return TableDataFactory.getTableData(queryAllNames(startIndex, maxRows));
}
public static List queryDynamic(String name, String numeroVal, String numeroNum, Operator op1, Operator op2, int startIndex, int maxRows){
EntityManager em = JPAUtil.getEntityManagerFactory().createEntityManager();
Query q = em.createQuery(NumerologicalName.SELECT_NAME_SQL + getSqlWhere(name, numeroVal, numeroNum, op1, op2) + NumerologicalName.ORDER_BY);
q.setFirstResult(startIndex);
q.setMaxResults(maxRows);
List names = q.getResultList();
em.close();
return names;
}
public static TableData<NumerologicalName> findDynamic(String name, String numeroVal, String numeroNum, Operator op1, Operator op2, int startIndex, int maxRows){
return TableDataFactory.getTableData(queryDynamic(name, numeroVal, numeroNum, op1,op2, startIndex, maxRows));
}
private static String getSqlWhere(String name, String numeroVal, String numeroNum, Operator op1, Operator op2){
StringBuilder sb = new StringBuilder();
if (name != null && name.trim().length() > 0) {
sb.append("name like '" + name.toUpperCase() + "%' " );
}
if (numeroVal != null && numeroVal.trim().length() > 0) {
if (sb.length() > 0) {
sb.append(op1);
}
sb.append(" numeroVal = " + numeroVal + " " );
}
if (numeroNum != null && numeroNum.trim().length() > 0) {
if (sb.length() > 0) {
sb.append(op2);
}
sb.append(" numeroNum = " + numeroNum + " " );
}
if (sb.length() > 0){
sb.insert(0, "where ");
}
log.fine("SQL Where " + sb);
return sb.toString();
}
public static void exportNames(String file){
if (file == null){
return;
}
ColumnMetaData colData = NumerologicalName.getColumnMetaData();
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
for(TableData<NumerologicalName> data : new NumeroNamePagination(exportPageLen)){
writer.write(TableDataFactory.toCSV(data,colData));
}
writer.close();
} catch (IOException e) {
log.log(Level.SEVERE,"Exception in exporting name ", e);
}
OptionDialog.showDialog("Exported Successfully.", JOptionPane.INFORMATION_MESSAGE);
}
private static void importNames(String file, boolean isCSV){
if (file == null){
return;
}
BufferedReader reader = null;
EntityManager em = null;
try {
reader = new BufferedReader(new FileReader(file));
em = JPAUtil.getEntityManagerFactory().createEntityManager();
EntityTransaction tx = em.getTransaction();
String name;
while( (name = reader.readLine()) != null){
tx.begin();
if (isCSV) {
name = name.split(",")[0];
}
try {
em.persist(new NumerologicalName(name));
log.fine("Added name " + name);
tx.commit();
}catch(EntityExistsException e){
log.warning(name + " already exists");
tx.rollback();
}
}
}catch (IOException e) {
log.log(Level.SEVERE,"Exception in importing name ", e);
}finally {
try {
reader.close();
}catch (IOException e) {
log.log(Level.SEVERE,"Exception in importing name ", e);
}
em.close();
}
OptionDialog.showDialog("Imported Successfully.", JOptionPane.INFORMATION_MESSAGE);
}
public static void importNamesFromCSV(String file){
importNames(file, true);
}
public static void importNamesFromList(String file){
importNames(file,false);
}
/*private static class NameTable implements Table {
List<? extends TableRowData> rows;
public NameTable(List<? extends TableRowData> rows ) {
this.rows = rows;
}
public TableData<? extends TableRowData> getTableData() {
return TableDataFactory.getTableData(rows);
}
public ColumnMetaData getColumnMetaData() {
return NumerologicalName.getColumnMetaData();
}
@Override
public String toString() {
return getTableData().toString();
}
};*/
}