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));
}
}
}
|