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