TKAtomField.java :  » Content-Management-System » webman » com » teamkonzept » field » Java Open Source

Java Open Source » Content Management System » webman 
webman » com » teamkonzept » field » TKAtomField.java
package com.teamkonzept.field;

import com.teamkonzept.lib.*;
import com.teamkonzept.publishing.markups.*;
import com.teamkonzept.web.*;
import com.teamkonzept.field.db.*;
import org.w3c.dom.*;

/**
 * The atom field control.
 *
 * Die Klasse TKAtomField ist die Basisklasse aller HTML-Eingabe-Objekte 
 * für HTML-Formulare.
 *
 * @author $Author: uli $
 * @version $Revision: 1.18 $
 */
public abstract class TKAtomField
  extends TKBaseField
{
  // $Id: TKAtomField.java,v 1.18 2002/02/25 17:47:40 uli Exp $

  protected StringBuffer    paramClasses = new StringBuffer();

  protected TKAtomField() {};
  protected TKAtomField( String fieldType, String fieldName, String showName )
  {
    initAtomField( fieldType, fieldName, showName );
  }

  public final void initAtomField( String fieldType, String fieldName, String showName )
  {
    initBaseField( fieldType, fieldName, showName );
  }

  public void addClass( String newClass )
  {
    if( (newClass == null) || (newClass.length() == 0) ) return;

    paramClasses.append( ";"+newClass );
  }

  public Object compileData( String prefix, TKHashtable data, TKHashtable context )
  {
    Object result = data.get( prefix+fieldName );
    if( result == null ) return getDefault();
    return result;
  }

  public Object compileData( String prefix, TKMarkupNode data, TKHashtable context )
  {
    TKXmlMarkup markup = data == null ? null : (TKXmlMarkup) data.markup;
    if (markup == null) { return null;}

    if (!markup.name.equals (getName())) {
      return null;
    }

    String val = TKMarkupParam.paramValue (markup.params,"VALUE");

    if (val == null) return getDefault();
    else return val;
  }

  public void fillIntoTemplate( TKHTMLTemplate t, Object value, String prefix )
  {
    super.fillIntoTemplate( t, value, prefix );
    t.set( "CLASSES", paramClasses );
    if( value != null ) t.set( "VALUE", value );
  }

  public void fillIntoPresentation( TKHTMLTemplate t, Object data, String scope )
  {
    String scopedName = scope+"."+getName();
    TKVector realData;
    if( data instanceof TKVector ) {
      realData = (TKVector) data;
    }
    else {
      realData = new TKVector(1);
      realData.addElement( data );
    }

    t.set( scopedName, data.toString() );
    t.set( scopedName+".SIZE", String.valueOf( realData.size() ) );
    // das so lassen ???
    t.setListIterator( new TKAtomFieldShowIterator(
      realData,
      t.getListIterator(),
      scopedName
    ) );
  }

  /**
    Feldklassen repraesentieren sich als DOM Baum
    @param doc Documentroot zum Erzeugen weiterer Elemente
    @param node Vaterknoten, an den weitere Knoten rangehaengt werden
  */
  public void fillIntoDOM(Document doc, Element node, Object data) throws DOMException
  {
    Element me = doc.createElement(getInternationalName());
    node.appendChild(me);
    fillAttributesIntoNode(me, data);
    fillDataIntoNode(doc, me, data);
  }

  /**
    fuellt in den DOM Node die Daten ein
  */
  protected void fillDataIntoNode(Document doc, Element node, Object data) throws DOMException
  {
    if (data != null)
    {
      TKVector realData;
      if( data instanceof TKVector ) {
        realData = (TKVector) data;
        node.setAttribute(MULTIPLE, Boolean.TRUE.toString());
      }
      else {
        realData = new TKVector();
        realData.addElement( data );
        node.setAttribute(MULTIPLE, Boolean.FALSE.toString());
      }
      for (int i = 0; i < realData.size(); i++)
      {
        createValueNode(doc, node, realData.elementAt(i).toString());
      }
    }
  }

  protected void createValueNode(Document doc, Element node, String data) throws DOMException
  {
    Element me = doc.createElement(VALUE_NODE_NAME);
    node.appendChild(me);
    Text txt = doc.createTextNode(data);
    me.appendChild(txt);
  }

  public int insertDataIntoDB( TKContentDBData db, Object data, int contentId, int leftNr )
  {
    TKContentNodeTableData node = insertNewContentNode( db, contentId, leftNr );
    int newNodeId = node.content_node_id;
    if( data instanceof TKVector ) {
      TKVector values = (TKVector) data;
      for( int i=0; i<values.size(); i++ ) {
        insertNewContentValue( db, contentId, newNodeId, i, (String) values.get(i) );
      }
    }
    else if( data != null ) {
      insertNewContentValue( db, contentId, newNodeId, 0, (String) data );
    }
    return leftNr+1;
  }

  public Object getDataFromDB( TKContentDBData db )
  {
    TKContentNodeTableData node = getContentNodeFromDB( db );
    TKContentValueTableData value;
    boolean done = false;
    TKVector result = new TKVector();
    do {
      try {
        value = getContentNodeValueFromDB( db, node );
        result.addElement( value.value );
      }
      catch( Throwable e ) {
        done = true;
      }
    } while( !done );

    int size = result.size();
    if( size == 0 ) return null;
    if( size == 1 ) return result.elementAt(0);
    return result;
  }

}
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.