SiteTreeUtils.java :  » Content-Management-System » webman » de » webman » sitetree » eventhandler » Java Open Source

Java Open Source » Content Management System » webman 
webman » de » webman » sitetree » eventhandler » SiteTreeUtils.java
package de.webman.sitetree.eventhandler;


import java.util.*;
import java.sql.*;
import java.io.*;

import com.teamkonzept.web.*;
import com.teamkonzept.lib.*;
import com.teamkonzept.field.*;
import com.teamkonzept.field.db.*;
import com.teamkonzept.db.*;

import com.teamkonzept.webman.mainint.*;
import de.webman.generator.*;
import de.webman.content.eventhandler.CEUtils;
import com.teamkonzept.international.LanguageManager;


import com.teamkonzept.webman.*;
import com.teamkonzept.webman.db.*;
import com.teamkonzept.webman.mainint.db.*;
import com.teamkonzept.webman.mainint.db.queries.*;
import com.teamkonzept.webman.mainint.db.queries.sitetree.CheckDocumentDependency;
import com.teamkonzept.webman.mainint.db.queries.DocDependency;
import com.teamkonzept.webman.mainint.events.*;

import com.oroinc.text.regex.*;

/**
 *   Utility Methoden fr
 *  SITE TREE (ST) Allgemeines
 * @author  $Author: uli $
 * @version $Revision: 1.10 $
*/
public class SiteTreeUtils implements ParameterTypes, DatabaseDefaults, UserCodes
{

  /**
    checkt beim Loeschen eines Dokuments/Verzeichnis, ob noch absolute Referenzen
    auf das Dokument zeigen
    @param shortName des Dokuments, falls null wird das Verzeichnis gecheckt
  */
  public static boolean checkReferences(Integer siteNodeId, String shortName, TKVector back) throws SQLException
  {
    TKQuery q;
    if (shortName != null)
    {
      q= TKDBManager.newQuery(CheckDocumentDependency.class);
      q.setQueryParams( "DOCUMENT_SHORTNAME", shortName);
    }
    else
    {
      q = TKDBManager.newQuery(DocDependency.class);
    }
    q.setQueryParams( "SITE_NODE_ID",  siteNodeId);
    q.execute();
    ResultSet rs = q.fetchResultSet();
    while (rs.next())
    {
      TKHashtable tmp = new TKHashtable();
      Integer sID = new Integer(rs.getInt("SITE_NODE_ID"));
      String path = getCurrentPath(sID);
      String sName = rs.getString("DOCUMENT_SHORTNAME");
      tmp.put("REF2", path + sName);
      back.addElement(tmp);
    }
    if (back.size() == 0)
    {
      TKHashtable tmp = new TKHashtable();
      tmp.put("REF2", LanguageManager.getText("sitestructure", "NOT_REFERENCED"));
      back.addElement(tmp);
      return false;
    }
    return true;
  }

  /**  keepSTContext
   *
   * schleift Context durch; nicht durch t.set( params.getClass( PARAMETER ) ),
   * da bei diesen field-Geschichten noch eine Menge anderer Parameter am
   * Start sind...
   *
   * @param Template t
   */
  public static void keepSTContext( TKEvent evt, TemplateBasic t ) throws Throwable
  {
    t.set( "THE_SELECTION_TYPE", evt.getNotNullParameter( PARAMETER, "THE_SELECTION_TYPE" ) );
    t.set( "THE_CONTENT_NODE_ID", evt.getNotNullParameter( PARAMETER, "THE_CONTENT_NODE_ID" ));
    t.set( "SITE_NODE_ID", evt.getParameter( PARAMETER, "SITE_NODE_ID" ) );
    t.set( "SITE_NODE_TYPE", evt.getParameter( PARAMETER, "SITE_NODE_TYPE" ) );
    t.set( "FORM_ID", evt.getParameter( PARAMETER, "FORM_ID" ) );
    t.set( "CONTENT_ID", evt.getNotNullParameter( PARAMETER, "CONTENT_ID" ));
    t.set( "SITE_NODE_NAME", evt.getNotNullParameter( PARAMETER, "SITE_NODE_NAME" ) );
    t.set( "SITE_NODE_SHORTNAME", evt.getNotNullParameter( PARAMETER, "SITE_NODE_SHORTNAME" ) );
  }

  /**
   * Speichern einer content componenten zuordnung
   *
   *
   *
   * @param selData, nodeName
   *
   *  selData: die SELECTION_DATA
   *  nodeName: der Name des Parameters, in dem die CONTENT_NODE_ID steht
   *        z.B. SINGLE_CONTENT_NODE_ID, oder NODE_ID, da Aufruf
   *        von verschiedenen Stellen (Templates) aus
   */
  public static void saveContentComponent( TKEvent evt, String selData, String nodeName ) throws Throwable
  {
    String sNodeId = evt.getParameter( PARAMETER, "SITE_NODE_ID" );
    String sDocIdx = evt.getParameter( PARAMETER, "SITE_NODE_DOC_IDX" );
    String sPresIdx = evt.getParameter( PARAMETER, "PRESENTATION_COMPONENT_IDX" );
    String sNodeType = evt.getParameter( PARAMETER, "SITE_NODE_TYPE" );
    String sIntType = evt.getParameter( PARAMETER, "INTEGRATION_TYPE" );

    TKQuery q = TKDBManager.newQuery(TKDBDocContentPut.class);
    q.setQueryParams( "SITE_NODE_ID", new Integer(sNodeId) );
    q.setQueryParams( "SITE_NODE_DOC_IDX", new Integer(sDocIdx) );
    q.setQueryParams( "PRESENTATION_COMPONENT_IDX", new Integer(sPresIdx) );

    String sContNodeId;
    String sSelType;
    if( sNodeType.equals( SINGLE ) && sIntType.equals( SINGLE ) ) {  // single node (SiteTree) und Single Integration
      if( evt.getParameter( PARAMETER, "ATTACH_SEL" ).equals( "SC" ) ) {  // Single Content Node ausgewaehlt
        sContNodeId = evt.getParameter( PARAMETER, nodeName );
        sSelType = null;
      }
      else {                            // single sel aus contents zu einem group node (content tree)
        sContNodeId = selData==null?evt.getParameter( PARAMETER, "THE_CONTENT_NODE_ID" ):evt.getParameter( PARAMETER, "NODE_ID" );
        sSelType = selData==null?null:evt.getParameter( PARAMETER, "SEL_TYPE" );
      }
      q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
      q.setQueryParams( "SELECTION_TYPE", sSelType );
    }
    else if( sNodeType.equals( GROUP ) && sIntType.equals( SINGLE ) ) {  // group node (SiteTree) und Single Integration
      if( evt.getParameter( PARAMETER, "ATTACH_SEL" ).equals( "PGC" ) ) {  // Primary Group Content ausgewaehlt
        q.setQueryParams( "CONTENT_NODE_ID", null );
        q.setQueryParams( "SELECTION_TYPE", null );
      }
      else {
        sContNodeId = evt.getParameter( PARAMETER, nodeName );
        q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
        q.setQueryParams( "SELECTION_TYPE", null );
      }
    }
    else {  // group integration
      sContNodeId = selData==null?evt.getParameter( PARAMETER, "THE_CONTENT_NODE_ID" ):evt.getParameter( PARAMETER, "NODE_ID" );
      sSelType = selData==null?null:evt.getParameter( PARAMETER, "SEL_TYPE" );
      q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
      q.setQueryParams( "SELECTION_TYPE", sSelType );
    }
    q.setQueryParams( "SELECTION_DATA", selData );
    q.execute();
    q.fetchResultSet();
  }

  /**
   * Update einer content componenten zuordnung
   *
   *
   *
   * @param selData, nodeName
   *
   *  selData: die SELECTION_DATA
   *  nodeName: der Name des Parameters, in dem die CONTENT_NODE_ID steht
   *        z.B. SINGLE_CONTENT_NODE_ID, oder NODE_ID, da Aufruf
   *        von verschiedenen Stellen (Templates) aus
   */
  public static void updateContentComponent(TKEvent evt, String selData, String nodeName ) throws Throwable
  {
    String sNodeId = evt.getParameter( PARAMETER, "SITE_NODE_ID" );
    String sDocIdx = evt.getParameter( PARAMETER, "SITE_NODE_DOC_IDX" );
    String sPresIdx = evt.getParameter( PARAMETER, "PRESENTATION_COMPONENT_IDX" );
    String sNodeType = evt.getParameter( PARAMETER, "SITE_NODE_TYPE" );
    String sIntType = evt.getParameter( PARAMETER, "INTEGRATION_TYPE" );

    TKQuery q = TKDBManager.newQuery(TKDBDocContentUpdate.class);
    q.setQueryParams( "SITE_NODE_ID", new Integer(sNodeId) );
    q.setQueryParams( "SITE_NODE_DOC_IDX", new Integer(sDocIdx) );
    q.setQueryParams( "PRESENTATION_COMPONENT_IDX", new Integer(sPresIdx) );

    String sContNodeId;
    String sSelType;
    if( sNodeType.equals( SINGLE ) && sIntType.equals( SINGLE ) ) {  // single node (SiteTree) und Single Integration
      if( evt.getParameter( PARAMETER, "ATTACH_SEL" ).equals( "SC" ) ) {  // Single Content Node ausgewaehlt
        sContNodeId = evt.getParameter( PARAMETER, nodeName );
        sSelType = null;
      }
      else {                            // single sel aus contents zu einem group node (content tree)
        sContNodeId = selData==null?evt.getParameter( PARAMETER, "THE_CONTENT_NODE_ID" ):evt.getParameter( PARAMETER, "NODE_ID" );
        sSelType = selData==null?null:evt.getParameter( PARAMETER, "SEL_TYPE" );
      }
      q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
      q.setQueryParams( "SELECTION_TYPE", sSelType );
    }
    else if( sNodeType.equals( GROUP ) && sIntType.equals( SINGLE ) ) {  // group node (SiteTree) und Single Integration
      if( evt.getParameter( PARAMETER, "ATTACH_SEL" ).equals( "PGC" ) ) {  // Primary Group Content ausgewaehlt
        q.setQueryParams( "CONTENT_NODE_ID", null );
        q.setQueryParams( "SELECTION_TYPE", null );
      }
      else if( evt.getParameter( PARAMETER, "ATTACH_SEL" ).equals( "GC" ) ) {  // Group Content ausgewaehlt
        sContNodeId = evt.getParameter( PARAMETER, nodeName );
        sSelType = selData==null?null:evt.getParameter( PARAMETER, "SEL_TYPE" );
        q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
        q.setQueryParams( "SELECTION_TYPE", sSelType );
      }
      else {    // Single Content
        sContNodeId = evt.getParameter( PARAMETER, nodeName );
        q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
        q.setQueryParams( "SELECTION_TYPE", null );
      }
    }
    else {  // group integration
      sContNodeId = selData==null?evt.getParameter( PARAMETER, "THE_CONTENT_NODE_ID" ):evt.getParameter( PARAMETER, "NODE_ID" );
      sSelType = selData==null?null:evt.getParameter( PARAMETER, "SEL_TYPE" );
      q.setQueryParams( "CONTENT_NODE_ID", new Integer( sContNodeId ) );
      q.setQueryParams( "SELECTION_TYPE", sSelType );
    }
    q.setQueryParams( "SELECTION_DATA", selData );
    q.execute();
    q.fetchResultSet();
  }

  /**
   * Speichern eines SiteTree node
   *
   *
   *
   * @param selData, selType, pGCNode
   *
   *  selData: die SELECTION_DATA
   *  selType: der SELECTION_TYPE
   *  pGCNode: der primary group content node (nur bei group nodes (SiteTree))
   */
  public static String saveSiteTreeNode( TKEvent evt, String selData, String selType, int pGCNode ) throws Throwable
  {
    String sNodeName = evt.getParameter( PARAMETER, "SITE_NODE_NAME" );
    String sNodeShortName = evt.getParameter( PARAMETER, "SITE_NODE_SHORTNAME" );
    sNodeShortName = CEUtils.checkFileName(sNodeShortName);
    String nodeType = evt.getParameter( PARAMETER, "SITE_NODE_TYPE" );
    String parId = evt.getParameter( PARAMETER, "SITE_NODE_ID" );

    TKQuery q = TKDBManager.newQuery(TKDBSiteTreeInsertNode.class);
    q.setQueryParams( "NODE_ID", new Integer(parId) );
    q.setQueryParams( "SITE_NODE_TYPE", new Integer(nodeType) );
    q.setQueryParams( "SITE_NODE_NAME", sNodeName );
    q.setQueryParams( "SITE_NODE_SHORTNAME", sNodeShortName );
    q.setQueryParams( "PG_CONTENT_NODE", pGCNode==-1?null:new Integer(pGCNode) );
    q.setQueryParams( "SELECTION_TYPE", selType );
    q.setQueryParams( "SELECTION_DATA", selData );
    q.execute();
    ResultSet rs = q.fetchResultSet();
    String nodeID = null;
      if( rs.next() ) {
        nodeID = Integer.toString( rs.getInt("SITE_NODE_ID") );
      }
      return nodeID;
  }

  /**
   * Update eines SiteTree node
   *
   *
   *
   * @param selData, selType, pGCNode
   *
   *  selData: die SELECTION_DATA
   *  selType: der SELECTION_TYPE
   *  pGCNode: der primary group content node (nur bei group nodes (SiteTree))
   */
  public static void updateSiteTreeNode( TKEvent evt, String selData, String selType, int pGCNode ) throws Throwable
  {
    String sNodeName = evt.getParameter( PARAMETER, "SITE_NODE_NAME" );
    String sNodeShortName = evt.getParameter( PARAMETER, "SITE_NODE_SHORTNAME" );
    String nodeType = evt.getParameter( PARAMETER, "SITE_NODE_TYPE" );
    String nodeId = evt.getParameter( PARAMETER, "SITE_NODE_ID" );
    sNodeShortName = CEUtils.checkFileName(sNodeShortName);

    TKQuery q = TKDBManager.newQuery(TKDBSiteTreeUpdateNode.class);
    q.setQueryParams( "SITE_NODE_ID", new Integer(nodeId) );
    q.setQueryParams( "SITE_NODE_TYPE", new Integer(nodeType) );
    q.setQueryParams( "SITE_NODE_NAME", sNodeName );
    q.setQueryParams( "SITE_NODE_SHORTNAME", sNodeShortName );
    q.setQueryParams( "PG_CONTENT_NODE", pGCNode==-1?null:new Integer(pGCNode) );
    q.setQueryParams( "SELECTION_TYPE", selType );
    q.setQueryParams( "SELECTION_DATA", selData );
    q.execute();
    q.fetchResultSet();
  }

  /**
   * ist der String destName als DOCUMENT_SHORTNAME nicht im ResultSet ?
   *
   * @param
   */
  public static boolean isNotInRs( TKDBResult rs, String destName ) throws Throwable
  {
    int curr = 0;
    TKDBResultRow row;
    boolean res = true;
    String checkName;
    while( (row = (TKDBResultRow) rs.get( curr++ ))!=null ) {
      checkName = (String) row.getColumn( "DOCUMENT_SHORTNAME" );
      res = checkName.equals( destName )==true?false:true;
      if( !res ) return res;
    }
    return res;
  }

  /**
   * ist der String checkId als CONTENT_NODE_ID im ResultSet ?
   *
   * @param
   */
  public static boolean isGroupNode( String checkId, TKDBResult rs ) throws Throwable
  {
    int curr = 0;
    TKDBResultRow row;
    boolean res = false;
    String rsId;
    while( (row = (TKDBResultRow) rs.get( curr++ ))!=null ) {
      rsId = (String) row.getColumn( "CONTENT_NODE_ID" );
      res = rsId.equals( checkId );
      if( res ) return res;
    }
    return res;
  }

  /**
   * Maske fuellen fuer neuen Node
   * (entweder durch click auf new,
   *  bei cancel einer selection verfeinerung,
   *  oder bei edit eines node)
   *
   * @param
   */
  public static void prepareNodeParams( TKHTMLTemplate t, String nodeType ) throws Throwable
  {
    if( nodeType.equals( GROUP ) ) {
      TKQuery q = TKWebmanDBManager.newQuery(TKDBContentTreeGetTypeOrderByName.class);
      q.setQueryParams( "CONTENT_NODE_TYPE", GROUP_INTEGER );  // alle group contents
      q.execute();
      ResultSet rs = q.fetchResultSet();

      TKDBTemplate.prepareListTemplate( rs, t, "ST_PGC_LIST" );

      q = TKWebmanDBManager.newQuery(TKDBContentSelClassGet.class);
      q.setQueryParams( "RESULT_TYPE", GROUP_INTEGER );
      q.execute();
      rs = q.fetchResultSet();

      TKDBTemplate.prepareListTemplate( rs, t, "ST_PGCST_LIST" );
    }
  }

  /**
   * stellt den path ab der documentroot bis zum aktuellen SITE_NODE (SITE_NODE_ID)
   * beginnend mit der root, sich zusammensetzend aus den SITE_NODE_SHORTNAMEs
   * zusammen. ROOT wird hier ignoriert !!!!!
   *
   * @param siteNodeId ID des Endknotens
   * @return aktueller Pfad
   * @throws SQLException Datenbankfehler
   */
  public static String getCurrentPath (Integer siteNodeId)
    throws SQLException
  {
    TKQuery q = TKDBManager.newQuery(TKDBSiteTreeGetParents.class);
    q.setQueryParams( "SITE_NODE_ID",  siteNodeId );
    q.execute();
    ResultSet rs = q.fetchResultSet();
    String res = "/";
    if (!rs.next()) // Root ignorieren und SQL Fehler vorbeugen
      return res;
    while( rs.next() ) {
      res += rs.getString( "SITE_NODE_SHORTNAME" )+"/";
    }
    return res;
  }

  /**
   * Returns the full path of the specified site node.
   *
   * @param id the id of the site node.
   * @return the full path of the specified site node.
   * @throws TKException if any error occurred during
   * site node path construction.
   */
  public static String getParentPath (Integer id)
    throws TKException
  {
    try
    {
      TKQuery query = TKDBManager.newQuery(TKDBSiteTreeGetParents.class);
      query.setQueryParams("SITE_NODE_ID",  id);
      query.execute();

      ResultSet result = query.fetchResultSet();
      StringBuffer path = new StringBuffer();

      if (result.next())
      {
        while (result.next())
        {
          path.append("/")
            .append(result.getString("SITE_NODE_NAME"));
        }
      }

      if (path.length() == 0)
      {
        path.append("/");
      }

      return path.toString();
    }
    catch (Exception e)
    {
            throw WebmanExceptionHandler.getException(e);
    }
  }

  /**
   * Vorbereiten der verfeinerten Content-Selection:
   * holen der selection_data, falls vorhanden, vorsetzen dieser in der sel class
   *
   *
   * @param
   */
  public static void prepareRefineSelection(TKEvent evt,  TKHTMLTemplate t ) throws Throwable
  {
    String selId = evt.getNotNullParameter(PARAMETER,"SELECTION_ID");
    String selData = "";
    if( !selId.equals( "" ) ) {
      TKQuery q = TKDBManager.newQuery(TKDBContentSelectionGet.class);
      q.setQueryParams( "SELECTION_ID", new Integer( selId ) );
      q.execute();
      ResultSet rs = q.fetchResultSet();
      if( rs.next() ) {
        selData = rs.getString( "SELECTION_DATA" );
      }
    }
    String selectedContent = evt.getParameter(PARAMETER,"THE_CONTENT_NODE_ID");
    if (selectedContent == null)
      throw new TKUserException("Kein Objekt gewhlt", NO_OBJECT, USER_SEVERITY, true, null);
    if(selData!=null && !selData.equals( "" ) ) {
      TKWMContentSelectorReg.edit(t,evt.getParameter(PARAMETER,"THE_SELECTION_TYPE"),Integer.parseInt(selectedContent),selData);
    }
    else {
      TKWMContentSelectorReg.edit(t,evt.getParameter(PARAMETER,"THE_SELECTION_TYPE"),Integer.parseInt(selectedContent));
    }
  }


}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.