Package qurtext.factory

Source Code of qurtext.factory.ChapterFactory

/* Copyright (C) Abu Rizal, 2009.
*
* This file is part of QurText.
*
* QurText is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* QurText is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with QurText. If not, see <http://www.gnu.org/licenses/>.
*/
package qurtext.factory;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.NoSuchElementException;

import javax.jdo.PersistenceManager;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.xml.sax.InputSource;

import qurtext.domain.Chapter;
import qurtext.domain.Section;

public class ChapterFactory {

  private String getTanzilChapterName(int chapterNo) {
    String location = "/quran/suras/sura[@index='"+chapterNo+"']/@name";
    return getTanzilChapterMetadaa(location);
  }

  private String getTanzilChapterTransliteration(int chapterNo) {
    String location = "/quran/suras/sura[@index='"+chapterNo+"']/@tname";
    return getTanzilChapterMetadaa(location);
  }

  private String getTanzilChapterMetadaa(String location) {
    File xmlDocument =
        new File("WEB-INF/quran-data.xml");
    XPathFactory factory = new org.apache.xpath.jaxp.XPathFactoryImpl();
    XPath xPath=factory.newXPath();
    try {
      XPathExpression  xPathExpression=
          xPath.compile(location);
      InputSource inputSource =
          new InputSource(new
               FileInputStream(xmlDocument));
      return xPathExpression.evaluate(inputSource);
    } catch (XPathExpressionException e) {
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
    return null;
  }

  @SuppressWarnings("unchecked")
  public List<Chapter> getAllChapterList() {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    pm.setDetachAllOnCommit(true);
    try {
      String query = "select from " + Chapter.class.getName();
      List<Chapter> resultList = new ArrayList<Chapter>();
      resultList.addAll((Collection<Chapter>) pm.newQuery(query)
          .execute());
//      for (Chapter chapter:resultList) {
//        StringBuffer title = new StringBuffer();
//        for (char c:chapter.getTitle().toCharArray()) {
//          String hexString = Integer.toHexString(c);
//          title.append("\\u" + "0000".substring(hexString.length()) + hexString);
//        }
//        System.out.println("{\"" + title + "\",\"" + chapter.getTransliteration() + "\"},");
//      }
      return resultList;
    } finally {
      pm.close();
    }
  }

  @SuppressWarnings("unchecked")
  private Chapter getChapter(PersistenceManager pm, int chapterNo) {
    try {
      String query = "select from " + Chapter.class.getName() + " where chapterNo==" + chapterNo;
      Chapter result=((Collection<Chapter>) pm.newQuery(query)
          .execute()).iterator().next();
      return result;
    } catch (NoSuchElementException e) {
      return null;
    }
  }

  private HashMap<Integer,Chapter> initialChapterMap= new HashMap<Integer,Chapter>();

  //TODO:get description for 558 rukus http://www.scribd.com/doc/16691610/Surah-Contents-an-Index-of-Quran
  public int initChapterList(int start) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
      if (start<=0) {
        String query = "select from " + Chapter.class.getName();
        pm.newQuery(query).deletePersistentAll();
      }
      if (initialChapterMap.size()<=0) {
           int [] chapterSize={0,7,286,200,176,120,165,206,75,129,109,
              123,111,43,52,99,128,111,110,98,135,
              112,78,118,64,77,227,93,88,69,60,
              34,30,73,54,45,83,182,88,75,85,
              54,53,89,59,37,35,38,29,18,45,
              60,49,62,55,78,96,29,22,24,13,
              14,11,11,18,12,12,30,52,52,44,
              28,28,20,56,40,31,50,40,46,42,
              29,19,36,25,22,17,19,26,30,20,
              15,21,11,8,8,19,5,8,8,11,
              11,8,3,9,5,4,7,3,6,3,5,4,5,6};
           int [][] sections  = {{1,1,7}
           ,{2,1,7}
           ,{2,8,20}
           ,{2,21,29}
           ,{2,30,39}
           ,{2,40,46}
           ,{2,47,59}
           ,{2,60,61}
           ,{2,62,71}
           ,{2,72,82}
           ,{2,83,86}
           ,{2,87,96}
           ,{2,97,103}
           ,{2,104,112}
           ,{2,113,121}
           ,{2,122,129}
           ,{2,130,141}
           ,{2,142,147}
           ,{2,148,152}
           ,{2,153,163}
           ,{2,164,167}
           ,{2,168,176}
           ,{2,177,182}
           ,{2,183,188}
           ,{2,189,196}
           ,{2,197,210}
           ,{2,211,216}
           ,{2,217,221}
           ,{2,222,228}
           ,{2,229,231}
           ,{2,232,235}
           ,{2,236,242}
           ,{2,243,248}
           ,{2,249,253}
           ,{2,254,257}
           ,{2,258,260}
           ,{2,261,266}
           ,{2,267,273}
           ,{2,274,281}
           ,{2,282,283}
           ,{2,284,286}
           ,{3,1,9}
           ,{3,10,20}
           ,{3,21,30}
           ,{3,31,41}
           ,{3,42,54}
           ,{3,55,63}
           ,{3,64,71}
           ,{3,72,80}
           ,{3,81,91}
           ,{3,92,101}
           ,{3,102,109}
           ,{3,110,120}
           ,{3,121,129}
           ,{3,130,143}
           ,{3,144,148}
           ,{3,149,155}
           ,{3,156,171}
           ,{3,172,180}
           ,{3,181,189}
           ,{3,190,200}
           ,{4,1,10}
           ,{4,11,14}
           ,{4,15,22}
           ,{4,23,25}
           ,{4,26,33}
           ,{4,34,42}
           ,{4,43,50}
           ,{4,51,59}
           ,{4,60,70}
           ,{4,71,76}
           ,{4,77,87}
           ,{4,88,91}
           ,{4,92,96}
           ,{4,97,100}
           ,{4,101,104}
           ,{4,105,112}
           ,{4,113,115}
           ,{4,116,126}
           ,{4,127,134}
           ,{4,135,141}
           ,{4,142,152}
           ,{4,153,162}
           ,{4,163,171}
           ,{4,172,176}
           ,{5,1,5}
           ,{5,6,11}
           ,{5,12,19}
           ,{5,20,26}
           ,{5,27,34}
           ,{5,35,43}
           ,{5,44,50}
           ,{5,51,56}
           ,{5,57,66}
           ,{5,67,77}
           ,{5,78,86}
           ,{5,87,93}
           ,{5,94,100}
           ,{5,101,108}
           ,{5,109,115}
           ,{5,116,120}
           ,{6,1,10}
           ,{6,11,20}
           ,{6,21,30}
           ,{6,31,41}
           ,{6,42,50}
           ,{6,51,55}
           ,{6,56,60}
           ,{6,61,70}
           ,{6,71,82}
           ,{6,83,90}
           ,{6,91,94}
           ,{6,95,100}
           ,{6,101,110}
           ,{6,111,121}
           ,{6,122,129}
           ,{6,130,140}
           ,{6,141,144}
           ,{6,145,150}
           ,{6,151,154}
           ,{6,155,165}
           ,{7,1,10}
           ,{7,11,25}
           ,{7,26,31}
           ,{7,32,39}
           ,{7,40,47}
           ,{7,48,53}
           ,{7,54,58}
           ,{7,59,64}
           ,{7,65,72}
           ,{7,73,84}
           ,{7,85,93}
           ,{7,94,99}
           ,{7,100,108}
           ,{7,109,126}
           ,{7,127,129}
           ,{7,130,141}
           ,{7,142,147}
           ,{7,148,151}
           ,{7,152,157}
           ,{7,158,162}
           ,{7,163,171}
           ,{7,172,181}
           ,{7,182,188}
           ,{7,189,206}
           ,{8,1,10}
           ,{8,11,19}
           ,{8,20,28}
           ,{8,29,37}
           ,{8,38,44}
           ,{8,45,48}
           ,{8,49,58}
           ,{8,59,64}
           ,{8,65,69}
           ,{8,70,75}
           ,{9,1,6}
           ,{9,7,16}
           ,{9,17,24}
           ,{9,25,29}
           ,{9,30,37}
           ,{9,38,42}
           ,{9,43,59}
           ,{9,60,66}
           ,{9,67,72}
           ,{9,73,80}
           ,{9,81,89}
           ,{9,90,99}
           ,{9,100,110}
           ,{9,111,118}
           ,{9,119,122}
           ,{9,123,129}
           ,{10,1,10}
           ,{10,11,20}
           ,{10,21,30}
           ,{10,31,40}
           ,{10,41,53}
           ,{10,54,60}
           ,{10,61,70}
           ,{10,71,82}
           ,{10,83,92}
           ,{10,93,103}
           ,{10,104,109}
           ,{11,1,8}
           ,{11,9,24}
           ,{11,25,35}
           ,{11,36,49}
           ,{11,50,60}
           ,{11,61,68}
           ,{11,69,83}
           ,{11,84,95}
           ,{11,96,109}
           ,{11,110,123}
           ,{12,1,6}
           ,{12,7,20}
           ,{12,21,29}
           ,{12,30,35}
           ,{12,36,42}
           ,{12,43,49}
           ,{12,50,57}
           ,{12,58,68}
           ,{12,69,79}
           ,{12,80,93}
           ,{12,94,104}
           ,{12,105,111}
           ,{13,1,7}
           ,{13,8,18}
           ,{13,19,26}
           ,{13,27,31}
           ,{13,32,37}
           ,{13,38,43}
           ,{14,1,6}
           ,{14,7,12}
           ,{14,13,21}
           ,{14,22,27}
           ,{14,28,34}
           ,{14,35,41}
           ,{14,42,52}
           ,{15,1,15}
           ,{15,16,25}
           ,{15,26,44}
           ,{15,45,60}
           ,{15,61,79}
           ,{15,80,99}
           ,{16,1,9}
           ,{16,10,21}
           ,{16,22,25}
           ,{16,26,34}
           ,{16,35,40}
           ,{16,41,50}
           ,{16,51,60}
           ,{16,61,65}
           ,{16,66,70}
           ,{16,71,76}
           ,{16,77,83}
           ,{16,84,89}
           ,{16,90,100}
           ,{16,101,110}
           ,{16,111,119}
           ,{16,120,128}
           ,{17,1,10}
           ,{17,11,22}
           ,{17,23,30}
           ,{17,31,40}
           ,{17,41,52}
           ,{17,53,60}
           ,{17,61,70}
           ,{17,71,77}
           ,{17,78,84}
           ,{17,85,93}
           ,{17,94,100}
           ,{17,101,111}
           ,{18,1,12}
           ,{18,13,17}
           ,{18,18,22}
           ,{18,23,31}
           ,{18,32,44}
           ,{18,45,49}
           ,{18,50,53}
           ,{18,54,59}
           ,{18,60,70}
           ,{18,71,82}
           ,{18,83,101}
           ,{18,102,110}
           ,{19,1,15}
           ,{19,16,40}
           ,{19,41,50}
           ,{19,51,65}
           ,{19,66,82}
           ,{19,83,98}
           ,{20,1,24}
           ,{20,25,54}
           ,{20,55,76}
           ,{20,77,89}
           ,{20,90,104}
           ,{20,105,115}
           ,{20,116,128}
           ,{20,129,135}
           ,{21,1,10}
           ,{21,11,29}
           ,{21,30,41}
           ,{21,42,50}
           ,{21,51,75}
           ,{21,76,93}
           ,{21,94,112}
           ,{22,1,10}
           ,{22,11,22}
           ,{22,23,25}
           ,{22,26,33}
           ,{22,34,38}
           ,{22,39,48}
           ,{22,49,57}
           ,{22,58,64}
           ,{22,65,72}
           ,{22,73,78}
           ,{23,1,22}
           ,{23,23,32}
           ,{23,33,50}
           ,{23,51,77}
           ,{23,78,92}
           ,{23,93,118}
           ,{24,1,10}
           ,{24,11,20}
           ,{24,21,26}
           ,{24,27,34}
           ,{24,35,40}
           ,{24,41,50}
           ,{24,51,57}
           ,{24,58,61}
           ,{24,62,64}
           ,{25,1,9}
           ,{25,10,20}
           ,{25,21,34}
           ,{25,35,44}
           ,{25,45,60}
           ,{25,61,77}
           ,{26,1,9}
           ,{26,10,33}
           ,{26,34,52}
           ,{26,53,69}
           ,{26,70,104}
           ,{26,105,122}
           ,{26,123,140}
           ,{26,141,159}
           ,{26,160,175}
           ,{26,176,191}
           ,{26,192,227}
           ,{27,1,14}
           ,{27,15,31}
           ,{27,32,44}
           ,{27,45,58}
           ,{27,59,66}
           ,{27,67,82}
           ,{27,83,93}
           ,{28,1,13}
           ,{28,14,21}
           ,{28,22,28}
           ,{28,29,42}
           ,{28,43,50}
           ,{28,51,60}
           ,{28,61,75}
           ,{28,76,82}
           ,{28,83,88}
           ,{29,1,13}
           ,{29,14,22}
           ,{29,23,30}
           ,{29,31,44}
           ,{29,45,51}
           ,{29,52,63}
           ,{29,64,69}
           ,{30,1,10}
           ,{30,11,19}
           ,{30,20,27}
           ,{30,28,40}
           ,{30,41,53}
           ,{30,54,60}
           ,{31,1,11}
           ,{31,12,19}
           ,{31,20,30}
           ,{31,31,34}
           ,{32,1,11}
           ,{32,12,22}
           ,{32,23,30}
           ,{33,1,8}
           ,{33,9,20}
           ,{33,21,27}
           ,{33,28,34}
           ,{33,35,40}
           ,{33,41,52}
           ,{33,53,58}
           ,{33,59,68}
           ,{33,69,73}
           ,{34,1,9}
           ,{34,10,21}
           ,{34,22,30}
           ,{34,31,36}
           ,{34,37,45}
           ,{34,46,54}
           ,{35,1,7}
           ,{35,8,14}
           ,{35,15,26}
           ,{35,27,37}
           ,{35,38,45}
           ,{36,1,12}
           ,{36,13,32}
           ,{36,33,50}
           ,{36,51,67}
           ,{36,68,83}
           ,{37,1,21}
           ,{37,22,74}
           ,{37,75,113}
           ,{37,114,138}
           ,{37,139,182}
           ,{38,1,14}
           ,{38,15,26}
           ,{38,27,40}
           ,{38,41,64}
           ,{38,65,88}
           ,{39,1,9}
           ,{39,10,21}
           ,{39,22,31}
           ,{39,32,41}
           ,{39,42,52}
           ,{39,53,63}
           ,{39,64,70}
           ,{39,71,75}
           ,{40,1,9}
           ,{40,10,20}
           ,{40,21,27}
           ,{40,28,37}
           ,{40,38,50}
           ,{40,51,60}
           ,{40,61,68}
           ,{40,69,78}
           ,{40,79,85}
           ,{41,1,8}
           ,{41,9,18}
           ,{41,19,25}
           ,{41,26,32}
           ,{41,33,44}
           ,{41,45,54}
           ,{42,1,9}
           ,{42,10,19}
           ,{42,20,29}
           ,{42,30,43}
           ,{42,44,53}
           ,{43,1,15}
           ,{43,16,25}
           ,{43,26,35}
           ,{43,36,45}
           ,{43,46,56}
           ,{43,57,67}
           ,{43,68,89}
           ,{44,1,29}
           ,{44,30,42}
           ,{44,43,59}
           ,{45,1,11}
           ,{45,12,21}
           ,{45,22,26}
           ,{45,27,37}
           ,{46,1,10}
           ,{46,11,20}
           ,{46,21,26}
           ,{46,27,35}
           ,{47,1,11}
           ,{47,12,19}
           ,{47,20,28}
           ,{47,29,38}
           ,{48,1,10}
           ,{48,11,17}
           ,{48,18,26}
           ,{48,27,29}
           ,{49,1,10}
           ,{49,11,18}
           ,{50,1,15}
           ,{50,16,29}
           ,{50,30,45}
           ,{51,1,23}
           ,{51,24,46}
           ,{51,47,60}
           ,{52,1,28}
           ,{52,29,49}
           ,{53,1,25}
           ,{53,26,32}
           ,{53,33,62}
           ,{54,1,22}
           ,{54,23,40}
           ,{54,41,55}
           ,{55,1,25}
           ,{55,26,45}
           ,{55,46,78}
           ,{56,1,38}
           ,{56,39,74}
           ,{56,75,96}
           ,{57,1,10}
           ,{57,11,19}
           ,{57,20,25}
           ,{57,26,29}
           ,{58,1,6}
           ,{58,7,13}
           ,{58,14,22}
           ,{59,1,10}
           ,{59,11,17}
           ,{59,18,24}
           ,{60,1,6}
           ,{60,7,13}
           ,{61,1,9}
           ,{61,10,14}
           ,{62,1,8}
           ,{62,9,11}
           ,{63,1,8}
           ,{63,9,11}
           ,{64,1,10}
           ,{64,11,18}
           ,{65,1,7}
           ,{65,8,12}
           ,{66,1,7}
           ,{66,8,12}
           ,{67,1,14}
           ,{67,15,30}
           ,{68,1,33}
           ,{68,35,52}
           ,{69,1,37}
           ,{69,38,52}
           ,{70,1,35}
           ,{70,36,44}
           ,{71,1,20}
           ,{71,21,28}
           ,{72,1,19}
           ,{72,20,28}
           ,{73,1,19}
           ,{73,20,20}
           ,{74,1,31}
           ,{74,32,56}
           ,{75,1,30}
           ,{75,31,40}
           ,{76,1,22}
           ,{76,23,31}
           ,{77,1,40}
           ,{77,41,50}
           ,{78,1,30}
           ,{78,31,40}
           ,{79,1,26}
           ,{79,27,46}
           ,{80,1,42}
           ,{81,1,29}
           ,{82,1,19}
           ,{83,1,36}
           ,{84,1,25}
           ,{85,1,22}
           ,{86,1,17}
           ,{87,1,19}
           ,{88,1,26}
           ,{89,1,30}
           ,{90,1,20}
           ,{91,1,15}
           ,{92,1,21}
           ,{93,1,11}
           ,{94,1,8}
           ,{95,1,8}
           ,{96,1,19}
           ,{97,1,5}
           ,{98,1,8}
           ,{99,1,8}
           ,{100,1,11}
           ,{101,1,11}
           ,{102,1,8}
           ,{103,1,3}
           ,{104,1,9}
           ,{105,1,5}
           ,{106,1,4}
           ,{107,1,7}
           ,{108,1,3}
           ,{109,1,6}
           ,{110,1,3}
           ,{111,1,5}
           ,{112,1,4}
           ,{113,1,5}
           ,{114,1,6}};
        for (int i=1;i<chapterSize.length;i++) {
          Chapter chapter=getChapter(pm, i);
          if (null==chapter) {
            chapter=new Chapter();
          }
          chapter.setChapterNo(i);
          chapter.setStartVerse(1);
          chapter.setEndVerse(chapterSize[i]);
          chapter.setTitel(getTanzilChapterName(i));
          chapter.setTransliteration(getTanzilChapterTransliteration(i));
          pm.makePersistent(chapter);
          initialChapterMap.put(i,chapter);
        }
        for (int i=0;i<sections.length;i++) {
          int[] sectionData=sections[i];
          Chapter chapter=initialChapterMap.get(sectionData[0]);
          Section section = chapter.getSection(sectionData[1]);
          if (null==section) {
            section=new Section();
            chapter.addSection(section);
          }
          section.setSectionNo(i);
          section.setChapterNo(chapter.getChapterNo());
          section.setStartVerse(sectionData[1]);
          section.setEndVerse(sectionData[2]);
          pm.makePersistent(section);
        }
      }
      Chapter chapter=initialChapterMap.get(start);
      if (null==chapter)
        return -1;
    } finally {
      pm.close();
    }
    return start+1;
  }

}
TOP

Related Classes of qurtext.factory.ChapterFactory

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.