Package org.xdams.utility

Source Code of org.xdams.utility.TitleManager

package org.xdams.utility;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import org.xdams.user.bean.UserBean;
import org.xdams.xml.builder.XMLBuilder;
import org.xdams.xml.builder.exception.XMLException;

public class TitleManager {

  public byte[] bs = null;

  XMLBuilder builder = null;

  UserBean userBean = null;

  public TitleManager(InputStream inputStream) throws IOException, XMLException {
    bs = getBytesFromFile(inputStream);
    builder = new XMLBuilder(new ByteArrayInputStream(bs));
  }

  public TitleManager(XMLBuilder theXMLconfTitle) throws IOException {
    builder = theXMLconfTitle;
  }

  public TitleManager(XMLBuilder theXMLconfTitle, UserBean userBean) throws IOException {
    builder = theXMLconfTitle;
    this.userBean = userBean;
  }

  public TitleManager() throws IOException {

  }

  public String defaultParsedTitle(String strTitolo, String sezioneName) {
    // System.out.println("---- INFO ---- defaultParsedTitle ("+sezioneName+"), title to parse: "+strTitolo );
    // System.out.println("TitleManager.defaultParsedTitle() strTitolo" + strTitolo);
    // System.out.println("TitleManager.defaultParsedTitle() sezioneName" + sezioneName);
    java.util.ArrayList arrTitolo = parseTitle(strTitolo, sezioneName);
    // System.out.println("TitleManager.defaultParsedTitle() arrTitolo" + arrTitolo);

    String strTitoloManager = "";
    String physDoc = "";
    String archive = "";
    String cssImageStyle = "scheda";
    for (int k = 0; k < arrTitolo.size(); k++) {
      String valueArr = (String) arrTitolo.get(k);
      strTitoloManager += valueArr + " ";
      // out.println(valueArr);
      if ((valueArr.indexOf("hasImage")) != -1) {
        cssImageStyle = "scheda_dig";
        strTitoloManager = strTitoloManager.replaceAll("hasImage", "");
      } else if ((valueArr.indexOf("physDoc")) != -1) {
        physDoc = strTitoloManager.replaceAll("<physDoc>", "");
        physDoc = physDoc.replaceAll("</physDoc>", "").trim();
        strTitoloManager = strTitoloManager.replaceAll("<physDoc>.*</physDoc>", "");

      } else if ((valueArr.indexOf("archive")) != -1) {
        archive = strTitoloManager.replaceAll("<archive>", "");
        archive = archive.replaceAll("</archive>", "").trim();
        strTitoloManager = strTitoloManager.replaceAll("<archive>.*</archive>", "");
      }
      // System.out.println("TitleManager.defaultParsedTitle() " + strTitoloManager);
      // System.out.println(" ---- INFO ---- defaultParsedTitle ("+sezioneName+"), parsed title: "+strTitoloManager );
    }

    return strTitoloManager;
  }

  /**
   * /root/titleManager/sezione/elemento/text() --> "separatore-separatore" oppure "0-separatore" oppure "separatore-" /root/titleManager/sezione/elemento/@mode --> "html" oppure vuoto se si usa /@flag="hasImage" oppure valorizzato (vedi isAttach se si usa /@flag="isAttach")
   * /root/titleManager/sezione/elemento/@flag --> "hasImage" oppure "isAttach" hasImage --> visualizzazione icona allegato generico isAttach --> visualizzazione specifica icona allegato accanto all'incona classica: /root/titleManager/sezione/elemento/@mode = "firstThumb" oppure "randomThumb"
   * oppure "firstAttach" oppure "allAttach"
   *
   *
   * /root/titleManager/sezione/elemento/@html --> tag HTML separati da ; /root/titleManager/sezione/elemento/@empty --> valore sostitutivo se la porzione di titolo e vuota /root/titleManager/sezione/elemento/@format_after --> stringa che segue al testo visualizzato (furoi dai tag di /@html)
   * /root/titleManager/sezione/elemento/@format_before --> stringa che precede al testo visualizzato (furoi dai tag di /@html) /root/titleManager/sezione/elemento/@isDate --> uguale a true se e una data /root/titleManager/sezione/elemento/@format_date_input --> formato data di input
   * /root/titleManager/sezione/elemento/@format_date_output --> formato data di output titleSepar --> taglia la stringa al primo carattere trovato
   *
   * @param strTitolo
   * @param sezioneName
   * @return
   */
  public ArrayList parseTitle(String strTitolo, String sezioneName) {
    ArrayList returnValue = new ArrayList();
    try {
      // System.out.println(" ---- INFO ---- defaultParsedTitle ("+sezioneName+"), title to parse: "+strTitolo );
      // byte[] bs = getBytesFromFile(new File("C:\\eclipse\\workspace\\XDams-New\\XdamsConfiguration\\titles.conf.xml"));
      // System.out.println("QUUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII");
      // System.out.println("QAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU" + builder.getXML("ISO-8859-1"));
      int cont = builder.contaNodi("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento");
      // System.out.println("cont " + cont);
      for (int i = 0; i < cont; i++) {
        String valore = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/text()");
        String strMode = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@mode");
        String strFlag = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@flag");
        String strSkipTest = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@skip_test");
        String maxLength = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@max_length");
        int substitutors = builder.contaNodi("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/substitutor");

        int max = 0;
        if (!maxLength.equals("")) {
          try {
            max = Integer.parseInt(maxLength);
          } catch (Exception e) {
            // TODO: handle exception
          }
        }

        String titoloRitorno = myTitle(valore, strTitolo).trim();

        if (substitutors > 0) {
          // System.out.println("TitleManager substitutor");
          StringBuffer stringBuffer = new StringBuffer();
          String substitutorsPrefix = "/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/substitutor";
          for (int is = 0; is < substitutors; is++) {
            try {
              Pattern regex = Pattern.compile(builder.valoreNodo(substitutorsPrefix + "[" + (is + 1) + "]/regex/text()", false));
              Matcher regexMatcher = regex.matcher(titoloRitorno);
              while (regexMatcher.find()) {
                regexMatcher.appendReplacement(stringBuffer, builder.valoreNodo(substitutorsPrefix + "[" + (is + 1) + "]/replacement/text()", false));
              }
              regexMatcher.appendTail(stringBuffer);
            } catch (PatternSyntaxException ex) {
              System.err.println("TitleManager substitutor  " + ex.getMessage());
              System.err.println("TitleManager substitutor  regex:" + builder.valoreNodo(substitutorsPrefix + "[" + (is + 1) + "]/regex/text()", false));
              System.err.println("TitleManager substitutor  replacement:" + builder.valoreNodo(substitutorsPrefix + "[" + (is + 1) + "]/replacement/text()", false));

            }
            titoloRitorno = stringBuffer.toString();
            stringBuffer = new StringBuffer();
          }
        }

        // System.out.println("strMode " + strMode);
        if (max > 0 && titoloRitorno.length() > max) {
          titoloRitorno = titoloRitorno.substring(0, max) + "...";
        }
        if (strFlag.equals("hasImage") && !titoloRitorno.equals("")) {
          titoloRitorno = "hasImage";
        } else if (strMode.equals("physDoc")) {
          titoloRitorno = "<physDoc>" + titoloRitorno + "</physDoc>";
        } else if (strMode.equals("archive")) {
          titoloRitorno = "<archive>" + titoloRitorno + "</archive>";
        } else if (strFlag.equals("isAttach")) {
          titoloRitorno = "<isAttach>" + titoloRitorno + "</isAttach>";
        } else if (strFlag.equals("skip")) {
          if (strSkipTest.equals("ifEmpty") && titoloRitorno.equals("")) {
            titoloRitorno = "<skip>true</skip>";
          } else if (strSkipTest.equals("ifNotEmpty")) {
            String testValue = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@value");
            if (!testValue.equals("") && testValue.equals(titoloRitorno)) {
              titoloRitorno = "<skip>" + titoloRitorno + "</skip>";
            } else if (testValue.equals("") && !titoloRitorno.equals("")) {
              titoloRitorno = "<skip>" + titoloRitorno + "</skip>";
            }
          }
        } else if (strFlag.equals("level")) {
          titoloRitorno = "<level>" + titoloRitorno + "</level>";
        }

        if (strMode.equals("html")) {
          String htmlTag = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@html");
          String emptyAttribute = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@empty");
          String format_after = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@format_after");
          String format_before = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@format_before");
          String isDate = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@isDate");
          String format_date_input = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@format_date_input");
          String format_date_output = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@format_date_output");
          String titleSepar = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@titleSepar");
          // System.out.println("htmlTag " + htmlTag);
          String[] htmlSplit = htmlTag.split(";");
          if (titoloRitorno.equals("") && !emptyAttribute.equals("")) {
            titoloRitorno = emptyAttribute;
          }
          if (!((titleSepar.trim()).equals("")) && titoloRitorno.indexOf(titleSepar) != -1) {
            titoloRitorno = titoloRitorno.substring(0, titoloRitorno.indexOf(titleSepar));
          }
          if (!titoloRitorno.equals("") && (!htmlTag.equals("") || isDate.equals("true"))) {
            if (!isDate.equals("") && isDate.equals("true")) {
              try {
                // String formatterData = "yyyyMMdd-yyyyMMdd";
                // String formatterOutput = "EEEE d MMMM yyyy HH:mm:ss";
                // String dataOriginal = "20060726-20060726";
                DateFormat formatter = new SimpleDateFormat(format_date_input);
                Date date = (Date) formatter.parse(titoloRitorno);
                java.text.SimpleDateFormat formatData = new java.text.SimpleDateFormat(format_date_output, java.util.Locale.ITALIAN);
                titoloRitorno = formatData.format(date);
              } catch (Exception e) {
                titoloRitorno = "CAMPO DATA ERRATO";
              }
            }

            for (int j = htmlSplit.length - 1; j >= 0; j--) {
              if (!(htmlSplit[j].trim()).equals("")) {
                titoloRitorno = "<" + htmlSplit[j] + ">" + titoloRitorno + "</" + htmlSplit[j] + ">";
              }
            }

          }

          if (!titoloRitorno.equals("")) {
            titoloRitorno = format_before + titoloRitorno + format_after;
          }
        }
        if (strMode.equals("simpleShowImage")) {
          String prefix = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@prefix");
          String titleSepar = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@titleSepar");
          if (!((titleSepar.trim()).equals("")) && titoloRitorno.indexOf(titleSepar) != -1) {
            String tmpTitoloRitorno = "";

            // "����sasdasdas.jpg��"
            while (tmpTitoloRitorno.equals("") && titoloRitorno.indexOf(titleSepar) != -1) {
              try {
                tmpTitoloRitorno = titoloRitorno.substring(0, titoloRitorno.indexOf(titleSepar)).trim();
                titoloRitorno = titoloRitorno.substring(titoloRitorno.indexOf(titleSepar) + 1);
              } catch (Exception e) {
                break;
              }

            }
            titoloRitorno = tmpTitoloRitorno;

          }
          if (!titoloRitorno.trim().equals("")) {
            if (userBean != null) {
              // prefix= prefix.replaceAll("getTheArch",userBean.getTheArch());
            }
            titoloRitorno = "<div class=\"titoliPreview\"><img src=\"" + prefix + titoloRitorno.replaceAll(" ", "%20") + "\"  /></div>";
          }
        }

        if (strMode.equals("style")) {
          String styleTag = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@style");
          String emptyAttribute = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@empty");
          // System.out.println("styleTag " + styleTag);
          if (titoloRitorno.equals("") && !emptyAttribute.equals("")) {
            titoloRitorno = emptyAttribute;
          }
          titoloRitorno = "<span style=\"" + styleTag + "\">" + titoloRitorno + "</span>";
        }

        if (strMode.equals("css")) {
          String cssTag = builder.valoreNodo("/root/titleManager/sezione[@name='" + sezioneName + "']/elemento[" + (i + 1) + "]/@className");
          // System.out.println("cssTag " + cssTag);
          // String[] htmlSplit = cssTag.split(";");
          // for (int j = htmlSplit.length-1; j >= 0; j--) {
          titoloRitorno = "<span class=\"" + cssTag + "\">" + titoloRitorno + "</span>";
          // }
        }
        returnValue.add(titoloRitorno);
        // System.out.println("returnValue " + returnValue);

      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    // System.out.println(" ---- INFO ---- defaultParsedTitle ("+sezioneName+"), parsed title: "+returnValue );
    return returnValue;
  }

  public byte[] getBytesFromFile(InputStream is) throws IOException {
    // System.out.println("Inizio ---> GestioneStream() ---> getBytesFromFile();");
    // InputStream is = new FileInputStream(file);
    // InputStream is = inputStream;
    // Get the size of the file
    // long length = file.length();
    long length = is.available();
    // You cannot create an array using a long type.
    // It needs to be an int type.
    // Before converting to an int type, check
    // to ensure that file is not larger than Integer.MAX_VALUE.
    if (length > Integer.MAX_VALUE) {
      // File is too large
    }
    // Create the byte array to hold the data
    byte[] bytes = new byte[(int) length];
    // Read in the bytes
    int offset = 0;
    int numRead = 0;
    while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
      offset += numRead;
    }
    // Ensure all the bytes have been read in
    if (offset < bytes.length) {
      throw new IOException("Could not completely read file ");
    }
    // Close the input stream and return bytes
    is.close();
    // System.out.println("Fine ---> GestioneStream() ---> getBytesFromFile();");
    return bytes;
  }

  public static String myTitle(String separatori, String theTitle) {
    String ritorno = "";
    String[] strArr = separatori.split(",");
    try {
      for (int i = 0; i < strArr.length; i++) {
        // System.out.println(strArr[i]);
        String[] strArrSin = strArr[i].split("-");
        // System.out.println(strArrSin.length);
        if (strArrSin.length == 2) {
          int inizio = 0;
          int fine = theTitle.indexOf(strArrSin[1]);
          if (!strArrSin[0].equals("0")) {
            inizio = theTitle.indexOf(strArrSin[0]) + strArrSin[0].length();
          }
          ritorno += theTitle.substring(inizio, fine) + " ";
        } else {
          if (strArrSin.length == 1) {
            int inizio = 0;
            int fine = theTitle.length();
            if (!strArrSin[0].equals("0")) {
              inizio = theTitle.indexOf(strArrSin[0]) + strArrSin[0].length();
            }
            ritorno += theTitle.substring(inizio, fine) + " ";
          }
        }
      }
    } catch (Exception e) {
      ritorno = theTitle;
    }
    return ritorno;
  }

  public static String myTitle(String separatori, String theTitle, String toHighlight) {
    String ritorno = "";
    String[] strArr = separatori.split(",");
    String[] strToHighlight = toHighlight.split(",");
    try {
      for (int i = 0; i < strArr.length; i++) {
        // System.out.println(strArr[i]);
        String[] strArrSin = strArr[i].split("-");
        if (strArrSin.length == 2) {
          int inizio = 0;
          int fine = theTitle.length();
          if (!strArrSin[1].equals("")) {
            fine = theTitle.indexOf(strArrSin[1]);
          }
          if (!strArrSin[0].equals("0")) {
            inizio = theTitle.indexOf(strArrSin[0]) + strArrSin[0].length();
          }
          ritorno += theTitle.substring(inizio, fine) + " ";
        }
      }
    } catch (Exception e) {
      ritorno = theTitle;
    }
    /*
     * int origine = 0; String newRitorno = ""; for (int i = 0; i < strToHighlight.length; i++) { while (ritorno.indexOf(strToHighlight[i],origine)>0) { int pos = ritorno.indexOf(strToHighlight[i],origine); newRitorno += ritorno.substring(0,pos); origine =
     * ritorno.indexOf(strToHighlight[i],origine) + 1; newRitorno += "<span class=\"chiaveEvidenziata\">"; newRitorno += ritorno.substring(pos,strToHighlight[i].length()); newRitorno += "</span>"; newRitorno += ritorno.substring(pos,strToHighlight[i].length()); }
     *
     * //ritorno = ritorno.replaceAll(strToHighlight[i],"<span class=\"chiaveEvidenziata\">"+strToHighlight[i]+"</span>"); } ritorno = newRitorno;
     */
    return ritorno;
  }
}
TOP

Related Classes of org.xdams.utility.TitleManager

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.