cancel
Showing results for 
Search instead for 
Did you mean: 

Collection Renderer - NoClassDefFound

Former Member
0 Kudos

Hello

I decompiled the CollectionListRenderer and created my own collection render with a standard layout on top.

So first of all I decompiled. I created a java project, uploaded the par and mapped the collection renderer with my java class. Next I copied the default layoutset with all it's subcomponents and made it use my collection renderer.

But when I preview my layoutset, I get some errors. I get the following message from debug:


The given configuration was not used, because the alias is not defined or points to an invalid java class

The logs tell me the following:

#1.5 #005056BA19F0005F00000026000017FC000457B7A3CB09A2#1222346145711#com.sapportals.wcm.rendering.base.AbstractFactory#sap.com/irj#com.sapportals.wcm.rendering.base.AbstractFactory#Guest#0##n/a##d48fceb08a3f11ddab1f005056ba19f0#Thread[ConfigurationEventDispatcher,5,SAPEngine_Application_Thread[impl:3]_Group]##0#0#Fatal##Plain###Could not create renderer with alias KenG_CollectionListRenderer and classname be.kindengezin.wcm.rendering.collection.cm.CollectionListRenderer:java.lang.NoClassDefFoundError
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:219)
	at com.sapportals.wcm.crt.CrtClassLoaderRegistry.forName(CrtClassLoaderRegistry.java:349)
	at com.sapportals.wcm.rendering.base.AbstractFactory.createLayoutObject(AbstractFactory.java:204)
	at com.sapportals.wcm.rendering.base.AbstractFactory.initialize(AbstractFactory.java:271)
	at com.sapportals.wcm.rendering.base.AbstractFactory.configEvent(AbstractFactory.java:471)
	at com.sapportals.config.event.ConfigEventService.dispatchEvent(ConfigEventService.java:227)
	at com.sapportals.config.event.ConfigEventService.configEvent(ConfigEventService.java:112)
	at com.sapportals.config.event.ConfigEventDispatcher.callConfigListeners(ConfigEventDispatcher.java:308)
	at com.sapportals.config.event.ConfigEventDispatcher.flushEvents(ConfigEventDispatcher.java:251)
	at com.sapportals.config.event.ConfigEventDispatcher.run(ConfigEventDispatcher.java:110)

I have a portalapp.xml:


<?xml version="1.0" encoding="utf-8"?>
<application>
 <application-config>
  <property name="SharingReference" value="usermanagement, knowledgemanagement, landscape, htmlb, exportalJCOclient, exportal"></property>
 </application-config>  
 <components></components>
 <services>
  <service name="RFServiceWrapper">
   <service-config>
    <property name="className" value="com.sap.netweaver.rf.wrapper.RFServiceWrapper"></property>
    <property name="startup" value="true"></property>
   </service-config>
  </service>
 </services>
</application>

And My service wrapper:

- IRFServiceWrapper


package com.sap.netweaver.rf.wrapper;
 
import com.sapportals.portal.prt.service.IService;

public interface IRFServiceWrapper extends IService{
    public static final String KEY = "be.kindengezin.CollectionRenderer.CollectionListRenderer";
}

- RFServiceWrapper


package com.sap.netweaver.rf.wrapper; 

import com.sapportals.portal.prt.service.IServiceContext;
import com.sapportals.portal.prt.service.IServiceConfiguration;
import com.sapportals.portal.prt.service.IService;
import com.sapportals.wcm.crt.CrtClassLoaderRegistry;

public class RFServiceWrapper implements IRFServiceWrapper{

 private IServiceContext mm_serviceContext;

 /**
 * Generic init method of the service. Will be called by the portal runtime. 
 * @param serviceContext
 */
 public void init(IServiceContext serviceContext){
  mm_serviceContext = serviceContext;
  CrtClassLoaderRegistry.addClassLoader(this.getKey(), this.getClass().getClassLoader());
 }

 /**
 * This method is called after all services in the portal runtime have already been initialized.
 */
 public void afterInit(){
 }

 /**
 * configure the service : @param configuration
 */
 public void configure(IServiceConfiguration configuration){
 }

 /**
 * This method is called by the portal runtime when the service is destroyed.
 */
 public void destroy(){
 }

 /**
 * This method is called by the portal runtime when the service is released.
 */
 public void release(){
 }

 /**
 * @return the context of the service, which was previously set by the portal runtime
 */
 public IServiceContext getContext(){
  return mm_serviceContext;
 }

 /**
 * This method should return a string that is unique to this service amongst all
 * other services deployed in the portal runtime. 
 * @return a unique key of the service
 */
 public String getKey(){
  return KEY;
 }
}

And to finish my CollectionListRenderer (which was simply decompiled). Of course I added the needed jar files to the build path (through "add external JARs...").


package be.kindengezin.wcm.rendering.collection.cm;

import com.sap.tc.logging.Location;
import com.sap.tc.logging.LogController;
import com.sapportals.htmlb.Component;
import com.sapportals.htmlb.FormLayout;
import com.sapportals.htmlb.FormLayoutCell;
import com.sapportals.htmlb.FormLayoutRow;
import com.sapportals.htmlb.HTMLFragment;
import com.sapportals.htmlb.enum.CellVAlign;
import com.sapportals.htmlb.page.DynPage;
import com.sapportals.htmlb.rendering.IPageContext;
import com.sapportals.wcm.WcmException;
import com.sapportals.wcm.control.util.EmptyComponent;
import com.sapportals.wcm.control.util.property.IPropertyColumn;
import com.sapportals.wcm.control.util.property.IPropertyPosition;
import com.sapportals.wcm.control.util.property.IPropertyWithModifiers;
import com.sapportals.wcm.control.util.property.IPropertyWithModifiersList;
import com.sapportals.wcm.control.util.property.PropertyColumnFactory;
import com.sapportals.wcm.rendering.base.ILayoutObject;
import com.sapportals.wcm.rendering.base.IProxy;
import com.sapportals.wcm.rendering.base.IRendererStatus;
import com.sapportals.wcm.rendering.collection.LightCollectionRenderer;
import com.sapportals.wcm.rendering.collection.cm.PropertyColumnRenderer;
import com.sapportals.wcm.rendering.collection.cm.PropertyHeaderRenderer;
import com.sapportals.wcm.rendering.resource.IResourceRenderer;
import com.sapportals.wcm.rendering.util.HtmlRendererUtil;
import com.sapportals.wcm.repository.IPropertyName;
import com.sapportals.wcm.repository.IPropertyNameList;
import com.sapportals.wcm.repository.IResource;
import com.sapportals.wcm.repository.IResourceContext;
import com.sapportals.wcm.repository.IResourceFactory;
import com.sapportals.wcm.repository.IResourceList;
import com.sapportals.wcm.repository.PropertyName;
import com.sapportals.wcm.repository.ResourceException;
import com.sapportals.wcm.repository.ResourceFactory;
import com.sapportals.wcm.repository.service.IRepositoryServiceFactory;
import com.sapportals.wcm.repository.service.layout.customizing.ICollectionRendererParameterNameConst;
import com.sapportals.wcm.repository.service.layout.customizing.IParameterName;
import com.sapportals.wcm.repository.service.layout.customizing.IParameters;
import com.sapportals.wcm.repository.service.layout.customizing.IResourceRendererParameterNameConst;
import com.sapportals.wcm.service.propertyconfig.IMetaModel;
import com.sapportals.wcm.service.propertyconfig.IMetaName;
import com.sapportals.wcm.service.propertyconfig.IMetaNameList;
import com.sapportals.wcm.service.propertyconfig.IPropertyConfigurationService;
import com.sapportals.wcm.util.logging.LoggingFormatter;
import com.sapportals.wcm.util.profiler.IProfiler;
import com.sapportals.wcm.util.profiler.IProfiler.Level;
import com.sapportals.wcm.util.profiler.Profiler;
import com.sapportals.wdf.WdfException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;

public class CollectionListRenderer extends LightCollectionRenderer
{
	private static final String PROFILER_PATH_UI_RENDER = "/KM/FLEXUI/RENDER/UI";
	private static final String PROFILER_PATH_UI_RENDER_ROW = "/KM/FLEXUI/RENDER/UI/ROW ";
	private static final String PROFILER_PATH_UI_RENDER_GETPROPS = "/KM/FLEXUI/RENDER/UI/GETPROPS";
	private static IProfiler s_profiler = Profiler.getInstance();
	private static Location log = Location.getLocation(CollectionListRenderer.class.getName());
	private static int PAGER_LINKS_DEFAULT = 5;
	private static final CellVAlign VERTICAL_ALIGN = HtmlRendererUtil.FLEXUI_VERTICAL_ALIGN;
	private int MaxNumberOfRows = 10;
	private int noOfColumns = 0;
	private static IPropertyName[] DEFAULT_PROP_NAMES = new PropertyName[3];
	private IPropertyPosition[] propertiesPositions;
	private static final String NEXT_LINE_START_COLUMN = "col";
	private static final String NEXT_LINE_METANAME = "metaName";
	private static final String NEXT_LINE_METANAME_MODIFIERS = "metaNameModifiers";
	private boolean debug = false;
	private boolean isManualOrdered = false;

	public CollectionListRenderer()
	{
		initParameterSettings();
		super.set508enabled(true);
	}

	private void initParameterSettings()
	{
		IParameterName[] supportedParameters =
			{
				ICollectionRendererParameterNameConst.BREADCRUMBSTYLE,
				ICollectionRendererParameterNameConst.BREADCRUMBVISIBILITYSTYLE,
				ICollectionRendererParameterNameConst.SHOWFOLDERTITLE,
				ICollectionRendererParameterNameConst.SHOWFILESSTYLE,
				ICollectionRendererParameterNameConst.SORT_ENABLED,
				ICollectionRendererParameterNameConst.LINKSSTYLE,
				ICollectionRendererParameterNameConst.SHOWFOLDERSSTYLE,
				ICollectionRendererParameterNameConst.SHOW_HIDDEN,
				ICollectionRendererParameterNameConst.COLUMNS,
				IResourceRendererParameterNameConst.ICONSTYLE,
				ICollectionRendererParameterNameConst.ROWS,
				ICollectionRendererParameterNameConst.ROWSPACING,
				ICollectionRendererParameterNameConst.COLUMNSPACING,
				ICollectionRendererParameterNameConst.MASSACTIONSTYLE,
				ICollectionRendererParameterNameConst.UI_GROUP_MASS,
				IResourceRendererParameterNameConst.ITEMACTIONSTYLE,
				ICollectionRendererParameterNameConst.ITEMSELECTIONMODE,
				ICollectionRendererParameterNameConst.ROWBACKGROUNDSTYLE,
				ICollectionRendererParameterNameConst.PROPERTYCOLUMNS,
				ICollectionRendererParameterNameConst.BACKGROUNDIMAGEPATH,
				ICollectionRendererParameterNameConst.BACKGROUNDIMAGESTYLE,
				ICollectionRendererParameterNameConst.SORT_PROPERTY,
				ICollectionRendererParameterNameConst.COMPONENTS,
				ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE,
				ICollectionRendererParameterNameConst.SORT_ORDER,
				ICollectionRendererParameterNameConst.COLLECTION_ACTIONSTYLE,
				ICollectionRendererParameterNameConst.UI_GROUP_COLLECTION,
				ICollectionRendererParameterNameConst.RESOURCE_LIST_FILTER,
				ICollectionRendererParameterNameConst.RESIZEHEIGHTSTYLE,
				ICollectionRendererParameterNameConst.RESIZEWIDHTSTYLE,
				ICollectionRendererParameterNameConst.FILTEREXTENSION,
				ICollectionRendererParameterNameConst.FILTERMIMETYPE,
				ICollectionRendererParameterNameConst.FILTERRESOURCETYPE,
				IResourceRendererParameterNameConst.UI_GROUP_RESOURCE,
				ICollectionRendererParameterNameConst.PAGER_LINK_COUNT,
				ICollectionRendererParameterNameConst.EMPTY_COLLECTION_FILE,
				ICollectionRendererParameterNameConst.EMPTY_COLLECTION_KEY,
				ICollectionRendererParameterNameConst.EMPTY_COLLECTION_STYLE };

		super.setSupportedParameters(supportedParameters);

		IParameters parameters = super.getParameters();

		parameters.setParameter(ICollectionRendererParameterNameConst.BREADCRUMBSTYLE, "horizontal");
		parameters.setParameter(ICollectionRendererParameterNameConst.BREADCRUMBVISIBILITYSTYLE, "standard");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOWFILESSTYLE, "all");
		parameters.setParameter(ICollectionRendererParameterNameConst.LINKSSTYLE, "all");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOWFOLDERSSTYLE, "all");
		parameters.setParameter(ICollectionRendererParameterNameConst.MASSACTIONSTYLE, "off");
		parameters.setParameter(IResourceRendererParameterNameConst.ITEMACTIONSTYLE, "hover");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOWFOLDERTITLE, false);
		parameters.setParameter(ICollectionRendererParameterNameConst.GRIDORDERSTYLE, "columnmajor");
		parameters.setParameter(ICollectionRendererParameterNameConst.ROWS, this.isManualOrdered);
		parameters.setParameter(ICollectionRendererParameterNameConst.ROWSPACING, 0);
		parameters.setParameter(ICollectionRendererParameterNameConst.SORT_ENABLED, true);
		parameters.setParameter(ICollectionRendererParameterNameConst.COLUMNSPACING, 0);
		parameters.setParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "off");
		parameters.setParameter(ICollectionRendererParameterNameConst.ROWBACKGROUNDSTYLE, "TRANSPARENT");
		parameters.setParameter(ICollectionRendererParameterNameConst.COLLECTION_ACTIONSTYLE, "hover");
		parameters.setParameter(ICollectionRendererParameterNameConst.PROPERTYCOLUMNS, "rnd:icon(noTitle/noColumnSpacing),rnd:displayname(contentLink)");
		parameters.setParameter(ICollectionRendererParameterNameConst.RESOURCE_LIST_FILTER, "default");
		parameters.setParameter(ICollectionRendererParameterNameConst.SHOW_HIDDEN, false);
		parameters.setParameter(ICollectionRendererParameterNameConst.RESIZEHEIGHTSTYLE, "compact");
		parameters.setParameter(ICollectionRendererParameterNameConst.RESIZEWIDHTSTYLE, "compact");
		parameters.setParameter(ICollectionRendererParameterNameConst.PAGER_LINK_COUNT, PAGER_LINKS_DEFAULT);
		parameters.setParameter(ICollectionRendererParameterNameConst.EMPTY_COLLECTION_STYLE, "off");
	}

	public int renderListHeader(FormLayout grid, int row) throws WcmException
	{
		if (super.isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
		{
			return row;
		}

		IPropertyPosition position = null;
		IPropertyColumn[] iterColumns = getColumnsList();
		boolean existsResource = super.getResourceList().size() != 0;
		String propertyHeaderColumnStyle = super.getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "Table Title Color");
		String headerClassStyle = HtmlRendererUtil.getHeaderClassStyle(propertyHeaderColumnStyle);
		if (headerClassStyle == null)
		{
			headerClassStyle = "";
		}

		FormLayoutCell cell = null;
		if (existsResource)
		{
			cell = grid.addComponent(row, 1, new HTMLFragment(""));
			cell.setStyle(headerClassStyle);
		}

		int rowSpan = 0;
		int columnSpan = 0;
		int line = 1;
		int lineNew = 0;
		int column = 1;
		if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off")))
		{
			++column;
		}

		int startRow = row;
		boolean rowHasTitle = false;
		this.propertiesPositions = new IPropertyPosition[iterColumns.length];

		PropertyHeaderRenderer sortHeader = new PropertyHeaderRenderer(super.getProxy(), this, super.getBundleHandler(), getChildCountMetaName(super.getParentCollection()), this.isManualOrdered, super.getIRS().getSortDefintion(), super.getResourceContext().getLocale());

		IMetaName metaName = null;
		for (int i = 0;(i < iterColumns.length) && (existsResource); ++i)
			if (iterColumns<i> != null)
			{
				rowSpan = 0;
				columnSpan = 0;
				position = PropertyColumnFactory.getInstance().getPosition(iterColumns<i>);
				if (position != null)
				{
					lineNew = position.getRow();
					if (line != lineNew)
					{
						column = position.getColumn();
						if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off")))
							++column;

						line = lineNew;
						if (rowHasTitle)
						{
							row = row + 1;
							rowHasTitle = false;
						}

					}

					rowSpan = position.getSpanRow();
					columnSpan = position.getSpanColumn();
				}
				this.propertiesPositions<i> = PropertyColumnFactory.getInstance().getPropertyPosition(row, rowSpan, column, columnSpan);

				boolean is508Required = false;
				try
				{
					is508Required = super.getProxy().getDynamicPage().getPageContext().requiresSection508Rendering();
				}
				catch (Exception ex)
				{
					log.errorT("Could not retrieve 508 mode for proxy <" + super.getProxy() + ">: " + LoggingFormatter.extractCallstack(ex));
				}
				metaName = PropertyHeaderRenderer.getMetaNameForTitle(iterColumns<i>, is508Required);
				if (metaName != null)
					rowHasTitle = true;

				if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.SORT_ENABLED, true)))
				{
					sortHeader.setSortEnabledParameter(false);
				}

				if (metaName != null)
				{
					if (columnSpan != 0)
					{
						cell = grid.addComponent(row, 1, sortHeader.createSortLink(metaName));
						cell.setColspan(columnSpan);
					}
					else
					{
						cell = grid.addComponent(row, column, sortHeader.createSortLink(metaName));
					}

					String[] padding = HtmlRendererUtil.getPropertyPaddingValues(iterColumns<i>, metaName);
					cell.setHorizontalAlignment(PropertyColumnFactory.getInstance().getHAlign(iterColumns<i>));
					cell.setVerticalAlignment(PropertyColumnFactory.getInstance().getVAlign(iterColumns<i>));

					if (padding != null)
					{
						cell.setPaddingTop(padding[0]);
						cell.setPaddingRight(padding[1]);
						cell.setPaddingBottom(padding[2]);
						cell.setPaddingLeft(padding[3]);
					}
				}
				++column;
				if (columnSpan != 0)
					column = column + columnSpan;

				if ((!(iterColumns<i>.contains("noColumnSpacing"))) && (column < this.noOfColumns))
				{
					cell = grid.addComponent(row, column, EmptyComponent.render());
					if (!("0".equals(super.getColumnSpacing())))
						cell.setWidth(super.getColumnSpacing());

					cell.setVerticalAlignment(VERTICAL_ALIGN);
					++column;
				}
			}

		if (!(rowHasTitle));
		setClassStyleForm(headerClassStyle, grid, startRow, --row, this.noOfColumns);

		return (++row);
	}

	public int renderListFooter(FormLayout grid, int row) throws WcmException
	{
		FormLayoutCell cell;
		boolean existsResource = super.getResourceList().size() != 0;
		if (!(super.isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off")))
		{
			String propertyHeaderColumnStyle = super.getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "Table Title Color");
			String headerClassStyle = HtmlRendererUtil.getHeaderClassStyle(propertyHeaderColumnStyle);
			if (headerClassStyle == null)
			{
				headerClassStyle = "";
			}

			cell = null;
		}

		return row;
	}

	public ILayoutObject getNewInstance()
	{
		return super.initNewInstance(new CollectionListRenderer());
	}

	private String getChildCountMetaName(IResource res) throws WcmException
	{
		if (res == null)
		{
			return null;
		}

		IResourceRenderer resourceRenderer = super.getRenderer(res);
		String par = resourceRenderer.getParameters().getParameter(IResourceRendererParameterNameConst.SHOWCHILDCOUNTSTYLE);
		if (par == null)
		{
			return null;
		}

		String resultMetaNameID = null;

		if (par.equals("folders/files"))
			resultMetaNameID = "rnd:childcount_both";
		else if (par.equals("sum"))
			resultMetaNameID = "rnd:childcount_sum";
		else if (par.equals("only files"))
			resultMetaNameID = "rnd:childcount_files";
		else if (par.equals("only folders"))
			resultMetaNameID = "rnd:childcount_folders";

		if (resultMetaNameID != null)
		{
			IMetaName metaName = getPropertyConfigurationService().getMetaModel().searchById(resultMetaNameID);
			if (metaName != null)
				return getEncodedSortProperty(metaName);

		}

		return null;
	}

	private String getEncodedSortProperty(IMetaName metaName)
	{
		if (metaName.getComposedOfMetaNames() != null)
		{
			IMetaNameList metaList = metaName.getComposedOfMetaNames();
			if (metaList.contains(metaName))
				return metaName.getId();
			if (metaList.size() == 1)
			{
				IMetaName composedMetaName = metaList.get(0);

				return composedMetaName.getId();
			}
			return metaName.getId();
		}

		return metaName.getId();
	}

	public static Vector getIMetaNameTypeText(IPropertyColumn propertyColumn, int col)
	{
		Hashtable metaNameHash = null;
		Vector metaNameVector = null;
		IMetaName currentMetaName = null;

		IPropertyWithModifiersList propertyWithModifiers = propertyColumn.getPropertyWithModifier();
		for (int i = 0; i < propertyWithModifiers.size(); ++i)
		{
			currentMetaName = propertyWithModifiers.get(i).getMetaName();

			if ((currentMetaName != null) && ("Text".equals(currentMetaName.getType())) && (propertyWithModifiers.size() != 1))
			{
				metaNameHash = new Hashtable();
				metaNameHash.put("metaName", currentMetaName);
				metaNameHash.put("col", Integer.toString(col));
				if (propertyWithModifiers.get(i).getConfigModifierList() != null)
					metaNameHash.put("metaNameModifiers", propertyWithModifiers.get(i));

				if (metaNameVector == null)
					metaNameVector = new Vector();

				metaNameVector.add(metaNameHash);
			}
		}

		return metaNameVector;
	}

	private static boolean[] isNextLineColumnNeeded(IPropertyColumn[] propertyColumns)
	{
		boolean[] result = new boolean[propertyColumns.length];
		IMetaName currentMetaName = null;

		for (int j = 0; j < propertyColumns.length; ++j)
		{
			IPropertyColumn propertyColumn = propertyColumns[j];
			result[j] = false;
			IPropertyWithModifiersList propertyWithModifiers = propertyColumn.getPropertyWithModifier();
			for (int i = 0; i < propertyWithModifiers.size(); ++i)
			{
				currentMetaName = propertyWithModifiers.get(i).getMetaName();

				if ((currentMetaName != null) && ("Text".equals(currentMetaName.getType())) && (propertyWithModifiers.size() != 1))
				{
					if (log.beDebug())
						log.debugT("Found meta name <" + currentMetaName + "> in property column <" + propertyColumn + "> that defines we need a new line column");

					result[j] = true;
				}
			}
		}

		return result;
	}

	private IPropertyConfigurationService getPropertyConfigurationService() throws WcmException
	{
		return ((IPropertyConfigurationService) ResourceFactory.getInstance().getServiceFactory().getService("PropertyConfigurationService"));
	}

	public final void setColumnsList(IPropertyColumn[] list) throws WcmException
	{
		super.getIRS().setPropertyColumns(list);
	}

	public IPropertyColumn[] getColumnsList() throws WcmException
	{
		return super.getIRS().getPropertyColumns();
	}

	private IPropertyColumn[] createCollectionColumns()
	{
		String columnsString = super.getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTYCOLUMNS, "rnd:icon(noTitle/noColumnSpacing),rnd:displayname(contentLink)");

		return PropertyColumnFactory.getInstance().parseProperty(columnsString);
	}
	// ERROR 
	//public Component renderUI() throws WcmException { // Byte code:
	//   0: getstatic 192	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:s_profiler	Lcom/sapportals/wcm/util/profiler/IProfiler;
	//   3: ldc 193
	//   5: getstatic 194	com/sapportals/wcm/util/profiler/IProfiler$Level:MEDIUM	Lcom/sapportals/wcm/util/profiler/IProfiler$Level;
	//   8: invokeinterface 195 3 0
	//   13: aload_0
	//   14: invokevirtual 86	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getProxy	()Lcom/sapportals/wcm/rendering/base/IProxy;
	//   17: invokeinterface 196 1 0
	//   22: ifeq +7 -> 29
	//   25: aload_0
	//   26: invokevirtual 197	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:writeDebugInformation	()V
	//   29: aload_0
	//   30: aload_0
	//   31: invokespecial 198	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:createCollectionColumns	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   34: invokevirtual 199	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:setColumnsList	([Lcom/sapportals/wcm/control/util/property/IPropertyColumn;)V
	//   37: new 200	com/sapportals/htmlb/FormLayout
	//   40: dup
	//   41: invokespecial 201	com/sapportals/htmlb/FormLayout:<init>	()V
	//   44: astore_1
	//   45: aload_1
	//   46: ldc 133
	//   48: ldc 133
	//   50: ldc 133
	//   52: ldc 133
	//   54: invokevirtual 202	com/sapportals/htmlb/FormLayout:setMargin	(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
	//   57: aload_1
	//   58: ldc 76
	//   60: invokevirtual 203	com/sapportals/htmlb/FormLayout:setWidth	(Ljava/lang/String;)V
	//   63: aconst_null
	//   64: astore_2
	//   65: aload_1
	//   66: aload_0
	//   67: getfield 9	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:debug	Z
	//   70: invokevirtual 204	com/sapportals/htmlb/FormLayout:setDebugMode	(Z)V
	//   73: iconst_1
	//   74: istore_3
	//   75: aload_0
	//   76: invokevirtual 205	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:isVisible	()Z
	//   79: ifne +12 -> 91
	//   82: aload_1
	//   83: astore 4
	//   85: jsr +733 -> 818
	//   88: aload 4
	//   90: areturn
	//   91: aload_0
	//   92: getstatic 16	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:SHOWFOLDERTITLE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   95: iconst_0
	//   96: invokevirtual 206	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameter	(Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;Z)Z
	//   99: ifeq +35 -> 134
	//   102: aload_1
	//   103: iload_3
	//   104: iconst_1
	//   105: aload_0
	//   106: invokevirtual 207	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:renderFolderTitle	()Lcom/sapportals/htmlb/Component;
	//   109: invokevirtual 79	com/sapportals/htmlb/FormLayout:addComponent	(IILcom/sapportals/htmlb/Component;)Lcom/sapportals/htmlb/FormLayoutCell;
	//   112: astore_2
	//   113: aload_2
	//   114: bipush 10
	//   116: invokevirtual 120	com/sapportals/htmlb/FormLayoutCell:setColspan	(I)V
	//   119: aload_2
	//   120: ldc 208
	//   122: invokevirtual 126	com/sapportals/htmlb/FormLayoutCell:setPaddingTop	(Ljava/lang/String;)V
	//   125: aload_2
	//   126: ldc 209
	//   128: invokevirtual 128	com/sapportals/htmlb/FormLayoutCell:setPaddingBottom	(Ljava/lang/String;)V
	//   131: iinc 3 1
	//   134: aload_0
	//   135: invokevirtual 71	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getResourceList	()Lcom/sapportals/wcm/repository/IResourceList;
	//   138: astore 4
	//   140: aload_0
	//   141: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   144: getstatic 51	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:EMPTY_COLLECTION_STYLE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   147: ldc 58
	//   149: invokeinterface 210 3 0
	//   154: ifne +56 -> 210
	//   157: aload 4
	//   159: ifnull +51 -> 210
	//   162: aload 4
	//   164: invokeinterface 72 1 0
	//   169: ifne +41 -> 210
	//   172: aload_1
	//   173: iload_3
	//   174: iconst_1
	//   175: new 211	com/sapportals/wcm/rendering/readymades/EmptyCollectionInfo
	//   178: dup
	//   179: aload_0
	//   180: invokevirtual 86	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getProxy	()Lcom/sapportals/wcm/rendering/base/IProxy;
	//   183: aload_0
	//   184: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   187: invokespecial 212	com/sapportals/wcm/rendering/readymades/EmptyCollectionInfo:<init>	(Lcom/sapportals/wcm/rendering/base/IProxy;Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;)V
	//   190: invokevirtual 79	com/sapportals/htmlb/FormLayout:addComponent	(IILcom/sapportals/htmlb/Component;)Lcom/sapportals/htmlb/FormLayoutCell;
	//   193: astore_2
	//   194: aload_2
	//   195: bipush 10
	//   197: invokevirtual 120	com/sapportals/htmlb/FormLayoutCell:setColspan	(I)V
	//   200: aload_2
	//   201: getstatic 213	com/sapportals/htmlb/enum/CellHAlign:LEFT	Lcom/sapportals/htmlb/enum/CellHAlign;
	//   204: invokevirtual 123	com/sapportals/htmlb/FormLayoutCell:setHorizontalAlignment	(Lcom/sapportals/htmlb/enum/CellHAlign;)V
	//   207: iinc 3 1
	//   210: aload_0
	//   211: aload_0
	//   212: invokevirtual 70	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getColumnsList	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   215: aload_0
	//   216: getfield 7	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:isManualOrdered	Z
	//   219: invokestatic 214	com/sapportals/wcm/control/util/property/PropertyColumnFactory:getNoOfColumn	([Lcom/sapportals/wcm/control/util/property/IPropertyColumn;I)I
	//   222: putfield 8	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:noOfColumns	I
	//   225: iconst_1
	//   226: istore 5
	//   228: aload_0
	//   229: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   232: getstatic 30	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:ITEMSELECTIONMODE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   235: ldc 81
	//   237: invokeinterface 74 3 0
	//   242: ldc 58
	//   244: invokevirtual 82	java/lang/String:equals	(Ljava/lang/Object;)Z
	//   247: ifne +16 -> 263
	//   250: iinc 5 1
	//   253: aload_0
	//   254: dup
	//   255: getfield 8	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:noOfColumns	I
	//   258: iconst_1
	//   259: iadd
	//   260: putfield 8	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:noOfColumns	I
	//   263: aload_0
	//   264: invokevirtual 88	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParentCollection	()Lcom/sapportals/wcm/repository/ICollection;
	//   267: ifnull +25 -> 292
	//   270: new 215	com/sapportals/wcm/control/util/FolderSettings
	//   273: dup
	//   274: aload_0
	//   275: invokevirtual 88	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParentCollection	()Lcom/sapportals/wcm/repository/ICollection;
	//   278: invokespecial 216	com/sapportals/wcm/control/util/FolderSettings:<init>	(Lcom/sapportals/wcm/repository/ICollection;)V
	//   281: astore 6
	//   283: aload_0
	//   284: aload 6
	//   286: invokevirtual 217	com/sapportals/wcm/control/util/FolderSettings:getOrderedFlag	()Z
	//   289: putfield 10	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:isManualOrdered	Z
	//   292: aload_0
	//   293: aload_1
	//   294: iload_3
	//   295: invokevirtual 218	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:renderListHeader	(Lcom/sapportals/htmlb/FormLayout;I)I
	//   298: istore_3
	//   299: aload_0
	//   300: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   303: getstatic 43	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:RESIZEWIDHTSTYLE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   306: ldc 67
	//   308: invokeinterface 74 3 0
	//   313: ldc 219
	//   315: invokevirtual 82	java/lang/String:equals	(Ljava/lang/Object;)Z
	//   318: istore 6
	//   320: aload_0
	//   321: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   324: getstatic 42	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:RESIZEHEIGHTSTYLE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   327: ldc 67
	//   329: invokeinterface 74 3 0
	//   334: ldc 219
	//   336: invokevirtual 82	java/lang/String:equals	(Ljava/lang/Object;)Z
	//   339: istore 7
	//   341: aload_0
	//   342: invokevirtual 220	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getStartRow	()I
	//   345: aload_0
	//   346: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   349: getstatic 24	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:ROWS	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   352: aload_0
	//   353: getfield 7	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:isManualOrdered	Z
	//   356: invokeinterface 221 3 0
	//   361: iadd
	//   362: istore 8
	//   364: iload 8
	//   366: aload 4
	//   368: invokeinterface 72 1 0
	//   373: if_icmple +12 -> 385
	//   376: aload 4
	//   378: invokeinterface 72 1 0
	//   383: istore 8
	//   385: iconst_0
	//   386: istore 9
	//   388: iload 7
	//   390: ifeq +15 -> 405
	//   393: iload 8
	//   395: ifeq +10 -> 405
	//   398: bipush 100
	//   400: iload 8
	//   402: idiv
	//   403: istore 9
	//   405: aload 4
	//   407: aload_0
	//   408: invokevirtual 220	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getStartRow	()I
	//   411: iload 8
	//   413: invokeinterface 222 3 0
	//   418: astore 10
	//   420: aload 10
	//   422: invokeinterface 223 1 0
	//   427: astore 11
	//   429: aconst_null
	//   430: astore 12
	//   432: iconst_1
	//   433: istore 13
	//   435: ldc 76
	//   437: astore 14
	//   439: aload_0
	//   440: getstatic 31	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:ROWBACKGROUNDSTYLE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   443: ldc 224
	//   445: invokevirtual 69	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:isExactlyValue	(Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;Ljava/lang/Object;)Z
	//   448: istore 15
	//   450: aload_0
	//   451: getstatic 31	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:ROWBACKGROUNDSTYLE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   454: ldc 225
	//   456: invokevirtual 69	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:isExactlyValue	(Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;Ljava/lang/Object;)Z
	//   459: istore 16
	//   461: iload 15
	//   463: ifne +8 -> 471
	//   466: iload 16
	//   468: ifeq +16 -> 484
	//   471: aload_1
	//   472: iload_3
	//   473: iconst_1
	//   474: invokestatic 226	com/sapportals/wcm/rendering/util/HtmlRendererUtil:importStyles	()Lcom/sapportals/htmlb/HTMLFragment;
	//   477: invokevirtual 79	com/sapportals/htmlb/FormLayout:addComponent	(IILcom/sapportals/htmlb/Component;)Lcom/sapportals/htmlb/FormLayoutCell;
	//   480: pop
	//   481: iinc 3 1
	//   484: aload_0
	//   485: invokevirtual 70	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getColumnsList	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   488: ifnull +285 -> 773
	//   491: invokestatic 95	com/sapportals/wcm/control/util/property/PropertyColumnFactory:getInstance	()Lcom/sapportals/wcm/control/util/property/PropertyColumnFactory;
	//   494: aload_0
	//   495: invokevirtual 70	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getColumnsList	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   498: invokevirtual 227	com/sapportals/wcm/control/util/property/PropertyColumnFactory:getPropertyNameList	([Lcom/sapportals/wcm/control/util/property/IPropertyColumn;)Lcom/sapportals/wcm/repository/IPropertyNameList;
	//   501: astore 17
	//   503: iconst_0
	//   504: istore 18
	//   506: goto +29 -> 535
	//   509: getstatic 228	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:DEFAULT_PROP_NAMES	[Lcom/sapportals/wcm/repository/IPropertyName;
	//   512: iload 18
	//   514: aaload
	//   515: ifnull +17 -> 532
	//   518: aload 17
	//   520: getstatic 228	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:DEFAULT_PROP_NAMES	[Lcom/sapportals/wcm/repository/IPropertyName;
	//   523: iload 18
	//   525: aaload
	//   526: invokeinterface 229 2 0
	//   531: pop
	//   532: iinc 18 1
	//   535: iload 18
	//   537: getstatic 228	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:DEFAULT_PROP_NAMES	[Lcom/sapportals/wcm/repository/IPropertyName;
	//   540: arraylength
	//   541: if_icmplt -32 -> 509
	//   544: getstatic 192	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:s_profiler	Lcom/sapportals/wcm/util/profiler/IProfiler;
	//   547: ldc 230
	//   549: getstatic 194	com/sapportals/wcm/util/profiler/IProfiler$Level:MEDIUM	Lcom/sapportals/wcm/util/profiler/IProfiler$Level;
	//   552: invokeinterface 195 3 0
	//   557: aload_0
	//   558: invokevirtual 86	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getProxy	()Lcom/sapportals/wcm/rendering/base/IProxy;
	//   561: invokeinterface 231 1 0
	//   566: aload 10
	//   568: aload 17
	//   570: invokevirtual 232	com/sapportals/wcm/rendering/base/ResourcePropertyAmalgamation:readProperties	(Lcom/sapportals/wcm/repository/IResourceList;Lcom/sapportals/wcm/repository/IPropertyNameList;)V
	//   573: jsr +14 -> 587
	//   576: goto +26 -> 602
	//   579: astore 19
	//   581: jsr +6 -> 587
	//   584: aload 19
	//   586: athrow
	//   587: astore 20
	//   589: getstatic 192	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:s_profiler	Lcom/sapportals/wcm/util/profiler/IProfiler;
	//   592: ldc 230
	//   594: invokeinterface 233 2 0
	//   599: pop2
	//   600: ret 20
	//   602: aload_0
	//   603: invokevirtual 70	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getColumnsList	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   606: invokestatic 234	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getPositionArray	([Lcom/sapportals/wcm/control/util/property/IPropertyColumn;)[Lcom/sapportals/wcm/control/util/property/IPropertyPosition;
	//   609: astore 19
	//   611: aload_0
	//   612: invokevirtual 70	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getColumnsList	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   615: invokestatic 235	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:isNextLineColumnNeeded	([Lcom/sapportals/wcm/control/util/property/IPropertyColumn;)[Z
	//   618: astore 20
	//   620: aload_0
	//   621: invokevirtual 53	com/sapportals/wcm/rendering/collection/LightCollectionRenderer:getParameters	()Lcom/sapportals/wcm/repository/service/layout/customizing/IParameters;
	//   624: getstatic 30	com/sapportals/wcm/repository/service/layout/customizing/ICollectionRendererParameterNameConst:ITEMSELECTIONMODE	Lcom/sapportals/wcm/repository/service/layout/customizing/IParameterName;
	//   627: ldc 81
	//   629: invokeinterface 74 3 0
	//   634: ldc 58
	//   636: invokevirtual 82	java/lang/String:equals	(Ljava/lang/Object;)Z
	//   639: ifne +7 -> 646
	//   642: iconst_1
	//   643: goto +4 -> 647
	//   646: iconst_0
	//   647: istore 21
	//   649: aload_0
	//   650: invokevirtual 70	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getColumnsList	()[Lcom/sapportals/wcm/control/util/property/IPropertyColumn;
	//   653: iload 21
	//   655: invokestatic 236	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:getPaddingList	([Lcom/sapportals/wcm/control/util/property/IPropertyColumn;Z)Ljava/util/List;
	//   658: astore 22
	//   660: goto +103 -> 763
	//   663: aload 11
	//   665: invokeinterface 237 1 0
	//   670: astore 12
	//   672: iload 15
	//   674: ifeq +16 -> 690
	//   677: ldc 238
	//   679: astore 14
	//   681: iload 13
	//   683: ifne +7 -> 690
	//   686: ldc 239
	//   688: astore 14
	//   690: aload_0
	//   691: aload_1
	//   692: iload_3
	//   693: iconst_1
	//   694: aload 12
	//   696: aload 14
	//   698: iload 9
	//   700: aload 17
	//   702: aload 19
	//   704: aload 20
	//   706: aload 22
	//   708: invokespecial 240	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:renderFormRow	(Lcom/sapportals/htmlb/FormLayout;IILcom/sapportals/wcm/repository/IResource;Ljava/lang/String;ILcom/sapportals/wcm/repository/IPropertyNameList;[Lcom/sapportals/wcm/control/util/property/IPropertyPosition;[ZLjava/util/List;)I
	//   711: istore_3
	//   712: iload 16
	//   714: ifeq +37 -> 751
	//   717: aload 11
	//   719: invokeinterface 241 1 0
	//   724: ifeq +27 -> 751
	//   727: aload_1
	//   728: iload_3
	//   729: iconst_1
	//   730: ldc 238
	//   732: iconst_1
	//   733: invokestatic 242	com/sapportals/wcm/rendering/util/HtmlRendererUtil:renderLineSeparator	(Ljava/lang/String;I)Lcom/sapportals/htmlb/Component;
	//   736: invokevirtual 79	com/sapportals/htmlb/FormLayout:addComponent	(IILcom/sapportals/htmlb/Component;)Lcom/sapportals/htmlb/FormLayoutCell;
	//   739: astore_2
	//   740: aload_2
	//   741: aload_0
	//   742: getfield 8	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:noOfColumns	I
	//   745: invokevirtual 120	com/sapportals/htmlb/FormLayoutCell:setColspan	(I)V
	//   748: iinc 3 1
	//   751: iload 13
	//   753: ifne +7 -> 760
	//   756: iconst_1
	//   757: goto +4 -> 761
	//   760: iconst_0
	//   761: istore 13
	//   763: aload 11
	//   765: invokeinterface 241 1 0
	//   770: ifne -107 -> 663
	//   773: aload_0
	//   774: aload_1
	//   775: iload_3
	//   776: invokevirtual 243	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:renderListFooter	(Lcom/sapportals/htmlb/FormLayout;I)I
	//   779: istore_3
	//   780: iload 6
	//   782: ifeq +9 -> 791
	//   785: aload_1
	//   786: ldc 244
	//   788: invokevirtual 203	com/sapportals/htmlb/FormLayout:setWidth	(Ljava/lang/String;)V
	//   791: aload_1
	//   792: astore 17
	//   794: jsr +24 -> 818
	//   797: aload 17
	//   799: areturn
	//   800: astore_1
	//   801: new 245	WcmException
	//   804: dup
	//   805: aload_1
	//   806: invokespecial 246	WcmException:<init>	(Ljava/lang/Throwable;)V
	//   809: athrow
	//   810: astore 23
	//   812: jsr +6 -> 818
	//   815: aload 23
	//   817: athrow
	//   818: astore 24
	//   820: getstatic 192	com/sapportals/wcm/rendering/collection/cm/ST_CollectionListRenderer:s_profiler	Lcom/sapportals/wcm/util/profiler/IProfiler;
	//   823: ldc 193
	//   825: invokeinterface 233 2 0
	//   830: pop2
	//   831: ret 24
	//
	// Exception table:
	//   from	to	target	type
	//   557	579	579	finally
	//   13	800	800	java/lang/Exception
	//   13	810	810	finally } 
	private static List getPaddingList(IPropertyColumn[] columnsList, boolean selectionActive)
	{
		List result = new ArrayList();
		for (int i = 0; i < columnsList.length; ++i)
		{
			String[] padding = null;
			try
			{
				padding = PropertyColumnRenderer.getPropertyColumnArrayPadding(columnsList<i>, selectionActive);
			}
			catch (WdfException e)
			{
				log.errorT("Could not parse padding for column <" + columnsList<i> + "> " + LoggingFormatter.beautify(e));
				String[] paddingHulp = { "0", "0", "0", "0" };
				padding = paddingHulp;
			}
			result.add(padding);
		}
		return result;
	}

	private static IPropertyPosition[] getPositionArray(IPropertyColumn[] columns)
	{
		IPropertyPosition[] result = new IPropertyPosition[columns.length];
		for (int i = 0; i < columns.length; ++i)
			result<i> = PropertyColumnFactory.getInstance().getPosition(columns<i>);

		if (log.beDebug())
			log.debugT("Calculated property position array <" + result + "> for property column array <" + columns + ">");

		return result;
	}

	private int renderFormRow(FormLayout grid, int row, int column, IResource res, String classStyle, int rowHeightPercent, IPropertyNameList propertynamelist, IPropertyPosition[] positions, boolean[] nextColumns, List paddings) throws WcmException
	{
		s_profiler.start("/KM/FLEXUI/RENDER/UI/ROW ", IProfiler.Level.MEDIUM);
		try
		{
			boolean emptyRow = true;
			try
			{
				Vector nextLine = new Vector();
				Vector nextLineColumn = new Vector();
				Hashtable nextLineElement = new Hashtable();
				FormLayoutCell cell = null;
				int nextLineCol = 0;
				int line = 1;
				int startRow = row;
				boolean selectionActive = false;
				IPropertyPosition position = null;
				IResourceRenderer renderer = super.getRenderer(res);
				renderer.setPropertyNameList(propertynamelist);

				String[] padding = null;

				Component comp = new HTMLFragment(" ");
				if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off")))
				{
					comp = super.renderItemSelectionMode(res);
					cell = grid.addComponent(row, column, comp);
					cell.setVerticalAlignment(VERTICAL_ALIGN);
					cell.setPaddingRight("2");
					cell.setPaddingLeft("3");

					selectionActive = true;
					++column;
				}

				int columnSpan = 0;
				int rowSpan = 0;

				IMetaName metaName = null;
				for (int i = 0; i < getColumnsList().length; ++i)
				{
					try
					{
						columnSpan = 0;

						position = positions<i>;
						if (position != null)
						{
							int lineNew = position.getRow();
							if (line != lineNew)
							{
								column = position.getColumn();
								if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off")))
									++column;

								line = lineNew;

								if (!(emptyRow))
									++row;

								emptyRow = true;
							}
							columnSpan = position.getSpanColumn();
							rowSpan = position.getSpanRow();
						}
						comp = PropertyColumnRenderer.renderPropertyColumn(renderer, res, getColumnsList()<i>, false, super.getProxy());

						emptyRow = (emptyRow) && (((comp == null) || (comp instanceof EmptyComponent)));
						if (comp != null)
						{
							if (columnSpan != 0)
							{
								cell = grid.addComponent(row, column, comp);
								cell.setColspan(columnSpan);
							}
							else
								cell = grid.addComponent(row, column, comp);

							if (rowSpan != 0)
							{
								cell.setRowspan(rowSpan);
							}

							cell.setVerticalAlignment(PropertyColumnFactory.getInstance().getVAlign(getColumnsList()<i>));
							cell.setHorizontalAlignment(PropertyColumnFactory.getInstance().getHAlign(getColumnsList()<i>));

							padding = (String[]) paddings.get(i);
							if (padding != null)
							{
								cell.setPaddingTop(padding[0]);
								cell.setPaddingRight(padding[1]);
								cell.setPaddingBottom(padding[2]);
								cell.setPaddingLeft(padding[3]);
							}
							selectionActive = false;
						}

						if (nextColumns<i> != false)
						{
							nextLineColumn = getIMetaNameTypeText(getColumnsList()<i>, column);
							nextLine.addAll(nextLineColumn);
						}
						++column;
					}
					catch (WcmException wcmEx)
					{
						log.debugT("Could not rendere row for resource <" + res + "> & columns <" + getColumnsList()<i> + ">" + LoggingFormatter.extractCallstack(wcmEx));

						if (columnSpan != 0)
						{
							cell = grid.addComponent(row, column, EmptyComponent.render());
							cell.setColspan(columnSpan);
						}
						else
							cell = grid.addComponent(row, column, EmptyComponent.render());

						++column;
					}
					if (columnSpan != 0)
					{
						column = column + columnSpan;
					}

					if ((!(getColumnsList()<i>.contains("noColumnSpacing"))) && (column < this.noOfColumns))
					{
						cell = grid.addComponent(row, column, EmptyComponent.render());
						if (!("0".equals(super.getColumnSpacing())))
						{
							cell.setWidth(super.getColumnSpacing());
						}

						++column;
					}
				}

				boolean emptyComponent = true;
				for (int k = 0; k < nextLine.size(); ++k)
				{
					nextLineElement = (Hashtable) nextLine.elementAt(k);
					if (nextLineElement != null)
					{
						IPropertyWithModifiers currProp = (IPropertyWithModifiers) nextLineElement.get("metaNameModifiers");
						nextLineCol = Integer.parseInt((String) nextLineElement.get("col"));
						metaName = (IMetaName) nextLineElement.get("metaName");
						renderer.getParameters().setParameter(IResourceRendererParameterNameConst.PROPERTY_MODIFIERS, PropertyColumnFactory.getInstance().getModifierString(currProp.getModifierList()));

						comp = PropertyColumnRenderer.renderMetaProperty(renderer, metaName, false, true);
						emptyComponent = false;
						if ((comp != null) && (comp instanceof EmptyComponent))
							emptyComponent = true;

						if (!(emptyComponent))
						{
							if (!(emptyRow));
							cell = grid.addComponent(++row, nextLineCol, comp);
							cell.setColspan(column);
							emptyRow = false;
						}
					}

				}

				int rowSpace = 0;
				try
				{
					rowSpace = Integer.parseInt(super.getRowSpacing());
				}
				catch (NumberFormatException nfEx)
				{
					log.debugT("Could not get an Integer from <" + super.getRowSpacing() + ">; " + LoggingFormatter.extractCallstack(nfEx));
					rowSpace = 0;
				}

				int endRow = row;
				if (emptyRow)
					endRow = row - 1;

				if (rowSpace != 0)
				{
					String paddingStyle = String.valueOf(rowSpace);
					if (startRow != endRow)
					{
						setHeightPercentageForm(rowHeightPercent, paddingStyle, 1, grid, startRow, this.noOfColumns);
						setHeightPercentageForm(rowHeightPercent, paddingStyle, 1, grid, endRow, this.noOfColumns);
					}
					else
					{
						setHeightPercentageForm(rowHeightPercent, paddingStyle, 0, grid, endRow, this.noOfColumns);
					}

				}

				if (!("".equals(classStyle)))
				{
					setClassStyleForm(classStyle, grid, startRow, row, this.noOfColumns);
				}
			}
			catch (Exception e)
			{
				throw new WcmException(e);
			}
			if (!(emptyRow))
				++row;
		}
		finally
		{
			s_profiler.stop("/KM/FLEXUI/RENDER/UI/ROW ");
		}

		return row;
	}

	private void setHeightPercentageForm(int rowHeightPercent, String padding, int paddingStyle, FormLayout grid, int row, int col)
	{
		FormLayoutCell cell = null;
		FormLayoutRow rows = grid.getRow(row);
		for (int j = 1; j <= col; ++j)
		{
			cell = rows.getCell(j);
			if (cell != null)
			{
				if (rowHeightPercent != 0)
					cell.setWidth(""";height="" + String.valueOf(rowHeightPercent) + "%"");

				if (paddingStyle == 1)
					cell.setPaddingTop(padding);
				else if (paddingStyle == -1)
					cell.setPaddingBottom(padding);
				else
				{
					cell.setPaddingTop(padding);
					cell.setPaddingBottom(padding);
				}
			}
		}
	}

	private void setClassStyleForm(String classStyle, FormLayout grid, int startRow, int endRow, int col)
	{
		FormLayoutCell cell = null;
		FormLayoutRow currentRow = null;
		int rowSpan = 0;
		int noCol = col;
		boolean hasRowSpan = false;
		for (int i = startRow; i <= endRow; ++i)
		{
			currentRow = grid.getRow(i);
			if (currentRow != null)
			{
				if (hasRowSpan)
				{
					noCol = col - 1;

					hasRowSpan = --rowSpan > 0;
				}
				else
					noCol = col;

				for (int j = 1; j <= noCol; ++j)
				{
					cell = currentRow.getCell(j);
					if ((cell != null) && (cell.getRowspan() > 1))
					{
						hasRowSpan = true;
						rowSpan = cell.getRowspan() - 1;
					}
					if (cell != null)
						cell.setStyle(classStyle);
					else
					{
						cell = grid.addComponent(i, j, EmptyComponent.render());
						cell.setStyle(classStyle);
					}
				}
			}
		}
	}

	public HeaderItem[][] genetateMatrixHeader() throws WcmException
	{
		if (super.isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
		{
			return null;
		}

		IPropertyPosition position = null;
		IPropertyColumn[] iterColumns = getColumnsList();
		boolean existsResource = super.getResourceList().size() != 0;
		if (!(existsResource))
		{
			return null;
		}

		HeaderItem[][] headerMatrix = new HeaderItem[10][20];

		int currentRow = 0;
		int currentColumn = 0;
		int currentRowSpan = 0;
		int currentColumnSpan = 0;
		int nextCol = 0;
		int maxRow = 0;
		int maxCol = 0;
		boolean is508Required = false;
		try
		{
			is508Required = super.getProxy().getDynamicPage().getPageContext().requiresSection508Rendering();
		}
		catch (Exception ex)
		{
			log.errorT("Could not retrieve 508 mode for proxy <" + super.getProxy() + ">: " + LoggingFormatter.extractCallstack(ex));
		}

		IMetaName metaName = null;
		for (int i = 0;(i < iterColumns.length) && (existsResource); ++i)
		{
			if (iterColumns<i> != null)
			{
				position = PropertyColumnFactory.getInstance().getPosition(iterColumns<i>);
				if (position != null)
				{
					if (currentRow != position.getRow() - 1)
						nextCol = 0;

					currentRow = position.getRow() - 1;
					currentColumn = position.getColumn() - 1 + nextCol;
					currentRowSpan = position.getSpanRow();
					currentColumnSpan = position.getSpanColumn();
				}
				else
				{
					currentRowSpan = 0;
					currentColumnSpan = 0;
				}
			}

			metaName = PropertyHeaderRenderer.getMetaNameForTitle(iterColumns<i>, is508Required);
			if (metaName != null)
			{
				headerMatrix[currentRow][currentColumn] = new HeaderItem(this, currentRowSpan, currentColumnSpan, metaName, iterColumns<i>);
				nextCol = 1;

				maxRow = (maxRow > currentRow) ? maxRow : currentRow;
				maxCol = (maxCol > currentColumn) ? maxCol : currentColumn;
			}
			++currentColumn;
			if (currentColumnSpan != 0)
				currentColumn = currentColumn + currentColumnSpan;

			if (!(iterColumns<i>.contains("noColumnSpacing")))
				++currentColumn;
		}

		++maxRow;
		++maxCol;
		if ((maxRow > 0) || (maxCol > 0))
		{
			HeaderItem[][] resultMatrix = new HeaderItem[maxRow][maxCol];
			for (int i = 0; i < maxRow; ++i)
				for (int k = 0; k < maxCol; ++k)
					resultMatrix<i>[k] = headerMatrix<i>[k];

			return resultMatrix;
		}
		return null;
	}

	public int renderListHeader1(FormLayout grid, int row) throws WcmException
	{
		if (super.isExactlyValue(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "off"))
			return row;

		HeaderItem[][] header = genetateMatrixHeader();
		if (header == null)
		{
			return row;
		}

		String propertyHeaderColumnStyle = super.getParameters().getParameter(ICollectionRendererParameterNameConst.PROPERTY_COLUMN_HEADER_STYLE, "Table Title Color");
		String headerClassStyle = HtmlRendererUtil.getHeaderClassStyle(propertyHeaderColumnStyle);
		if (headerClassStyle == null)
		{
			headerClassStyle = "";
		}

		FormLayoutCell cell = null;

		int columnSpan = 0;

		int column = 1;
		if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off")))
		{
			++column;
		}

		int startRow = row;
		HeaderItem headerItem = null;
		PropertyHeaderRenderer sortHeader = new PropertyHeaderRenderer(super.getProxy(), this, super.getBundleHandler(), getChildCountMetaName(super.getParentCollection()), this.isManualOrdered, super.getIRS().getSortDefintion(), super.getResourceContext().getLocale());

		IMetaName metaName = null;
		int colHeader = 0;
		for (int i = 0; i < header.length; ++i)
		{
			row = row + i;
			if (!(super.getParameters().getParameter(ICollectionRendererParameterNameConst.ITEMSELECTIONMODE, "multiple").equals("off")))
				colHeader = 1;
			else
			{
				colHeader = 0;
			}

			for (int k = 0; k < header[0].length; ++k)
			{
				headerItem = header<i>[k];
				if (headerItem != null)
				{
					boolean is508Required = false;
					try
					{
						is508Required = super.getProxy().getDynamicPage().getPageContext().requiresSection508Rendering();
					}
					catch (Exception ex)
					{
						log.errorT("Could not retrieve 508 mode for proxy <" + super.getProxy() + ">: " + LoggingFormatter.extractCallstack(ex));
					}
					metaName = headerItem.getLabelMetaName();

					if (headerItem.getColSpan() != 0)
					{
						cell = grid.addComponent(row, k + colHeader + 1, sortHeader.createSortLink(metaName));
						cell.setColspan(headerItem.getColSpan());
					}
					else
					{
						cell = grid.addComponent(row, k + colHeader + 1, sortHeader.createSortLink(metaName));
					}

					String[] padding = HtmlRendererUtil.getPropertyPaddingValues(headerItem.getPropertyColumn(), metaName);
					cell.setHorizontalAlignment(PropertyColumnFactory.getInstance().getHAlign(headerItem.getPropertyColumn()));
					cell.setVerticalAlignment(PropertyColumnFactory.getInstance().getVAlign(headerItem.getPropertyColumn()));
					if (padding != null)
					{
						cell.setPaddingTop(padding[0]);
						cell.setPaddingRight(padding[1]);
						cell.setPaddingBottom(padding[2]);
						cell.setPaddingLeft(padding[3]);
					}

					if (columnSpan != 0)
						colHeader = colHeader + columnSpan;
				}
			}

		}

		setClassStyleForm(headerClassStyle, grid, startRow, row, this.noOfColumns);

		return (++row);
	}

	static {
		try
		{
			DEFAULT_PROP_NAMES[0] = PropertyName.getPN("http://sapportals.com/xmlns/cm", "readonly");
			DEFAULT_PROP_NAMES[1] = PropertyName.createCreatedBy();
			DEFAULT_PROP_NAMES[2] = PropertyName.createLastModifiedBy();
		}
		catch (ResourceException e)
		{
			log.errorT("Could not set default property name" + LoggingFormatter.beautify(e));
		}
	}

	protected class HeaderItem
	{
		private int rowSpan;
		private int colSpan;
		private IMetaName labelMetaName;
		private IPropertyColumn column;
		private boolean processed;
		private final CollectionListRenderer mythis;

		public HeaderItem(CollectionListRenderer this$0)
		{
			this.mythis = this$0;

			this.rowSpan = 0;
			this.colSpan = 0;
			this.labelMetaName = null;
			this.column = null;
			this.processed = false;
		}

		public HeaderItem(CollectionListRenderer this$0, int rowSpan, int colSpan, IMetaName metaName, IPropertyColumn column)
		{
			this.mythis = this$0;

			this.rowSpan = 0;
			this.colSpan = 0;
			this.labelMetaName = null;
			this.column = null;
			this.processed = false;

			this.rowSpan = rowSpan;
			this.colSpan = colSpan;
			this.labelMetaName = metaName;
			this.column = column;
		}

		public void setRowSpan(int row)
		{
			this.rowSpan = row;
		}

		public int getRowSpan()
		{
			return this.rowSpan;
		}

		public void setColSpan(int col)
		{
			this.colSpan = col;
		}

		public int getColSpan()
		{
			return this.colSpan;
		}

		public void setLabelMetaName(IMetaName column)
		{
			this.labelMetaName = column;
		}

		public IMetaName getLabelMetaName()
		{
			return this.labelMetaName;
		}

		public void setPropertyColumn(IPropertyColumn column)
		{
			this.column = column;
		}

		public IPropertyColumn getPropertyColumn()
		{
			return this.column;
		}

		public String toString()
		{
			return "Item:  RowSpan=" + this.rowSpan + "; ColSpan=" + this.colSpan + "; PropertyColumn=" + getLabelMetaName();
		}
	}
}

Thanks for help!

Christof

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hello

I think I did what you told me to do.

I just referenced the jars in my build path to be able to compile. (so kicked them out of my project)

So I added the referneces to my portalapp.xml:


<?xml version="1.0" encoding="utf-8"?>
<application>
 <application-config>
  <property name="SharingReference" value="usermanagement, knowledgemanagement, landscape, htmlb, exportalJCOclient, exportal, com.sap.km.cm.ui.flex, com.sap.portal.htmlb, com.sap.km.cm.ui, com.sap.km.cm.service.base, com.sap.km.cm.repository.service.base, com.sap.portal.runtime.config, com.sap.netweaver.bc.rf, com.sap.netweaver.bc.sf, com.sap.netweaver.bc.util, com.sap.km.bs.ui.wdf"/>
  <property name="PrivateSharingReference" value="be.kindengezin.CollectionRenderer"/>
 </application-config>  
 <components/>
 <services>
  <service name="RFServiceWrapper">
   <service-config>
    <property name="className" value="com.sap.netweaver.rf.wrapper.RFServiceWrapper"/>
    <property name="startup" value="true"/>
   </service-config>
  </service>
 </services>
</application>

As we need a PrivateSharingReference, I needed to add km.appl.ui.flex.collection_core.jar to dist -> PORTAL-INF -> private -> lib. In the portalapp.xml, I need to reference to this file through PrivateSharingReference. So I used the name of my par file (be.kindengezin.CollectionRenderer.par) to be able to use the jar in private lib.

The result in the logs is still the same (severity=fatal):


Could not create renderer with alias KenG_CollectionListRenderer and classname be.kindengezin.wcm.rendering.collection.cm.CollectionListRenderer:java.lang.NoClassDefFoundError
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:219)
	at com.sapportals.wcm.crt.CrtClassLoaderRegistry.forName(CrtClassLoaderRegistry.java:349)
	at com.sapportals.wcm.rendering.base.AbstractFactory.createLayoutObject(AbstractFactory.java:204)
	at com.sapportals.wcm.rendering.base.AbstractFactory.initialize(AbstractFactory.java:271)
	at com.sapportals.wcm.rendering.base.AbstractFactory.configEvent(AbstractFactory.java:471)
	at com.sapportals.config.event.ConfigEventService.dispatchEvent(ConfigEventService.java:227)
	at com.sapportals.config.event.ConfigEventService.configEvent(ConfigEventService.java:112)
	at com.sapportals.config.event.ConfigEventDispatcher.callConfigListeners(ConfigEventDispatcher.java:308)
	at com.sapportals.config.event.ConfigEventDispatcher.flushEvents(ConfigEventDispatcher.java:251)
	at com.sapportals.config.event.ConfigEventDispatcher.run(ConfigEventDispatcher.java:110)

and the error message from debug still says:


The given configuration was not used, because the alias is not defined or points to an invalid java class

Thanks for helping me!

Christof

0 Kudos

Hi,

Please dont add km.appl.ui.flex.collection_core.jar to private lib of your project.

Even the way you set PrivateSharingReference to add km.appl.ui.flex.collection_core.jar is wrong.

So decompile the classes that you want to refer in km.appl.ui.flex.collection_core.jar and add them directly to your project (Use different java package names for these copied classes).

Regards,

Praveen Gudapati

Former Member
0 Kudos

Thanks man, the problem is solved!

Christof

Former Member
0 Kudos

Hi Christof,

I am in a request to customize the collectionListRenderer class to sort two columns, and as you where discussing the simillar kind of customization, can you please provide me a flow or steps to be followed to achive this, which will be usefull for me to start with.

Regards,

Bala

Answers (2)

Answers (2)

Former Member
0 Kudos

Hello

Sorry, I don't think I get your point. As far as my knowledge reaches, I think it should work by adding the libs directly to the project.

So I added the libs to the folder private -> lib. The application should find these jars normally itself in these maps? Or am I mistaken?

And could you give me a concrete exemple of an portalapp.xml, because you are talking about adding these references. But as far as I know, these won't add something usefull. :$

And these references, should they reference the original files or the files I added in my project or .. ?

Christof

(I did something similar with the search component, added some public jars to the buildpath to compile locally. But I didn't need to use these sharingreferences. So I think, this makes me a bit confused)

0 Kudos

Hi,

You can add jar files to your projects build path so that you can compile your source in NWDS but you should not add them to private -> lib.

You should always use SharingReference if you are using any classes from other portal applications, this will ensure that the classes are found at runtime on the server.

To know what SharingReferences should be added use classlocator to know which application name should be added to SharingReference

https://forums.sdn.sap.com/thread.jspa?threadID=714739

http://help.sap.com/saphelp_nw70/helpdata/EN/53/c8af42a6f6cb6ae10000000a155106/frameset.htm

If you think you can use the classes of other application just by adding their jars to buildpath, then it is wrong, check this for example:

https://forums.sdn.sap.com/thread.jspa?threadID=112324

Regards,

Praveen Gudapati

0 Kudos

Hi,

I advice to check 2 points:

1. Check that all the classes you are using in your custom collectionrenderer that they are not from private part of the KM.

For example: Classes com.sapportals.wcm.rendering.collection.cm.PropertyColumnRenderer & com.sapportals.wcm.rendering.collection.cm.PropertyHeaderRenderer which you use are from jar files which are in private lib part. So you cannot use them like the way you do here. One solution is to copy these classes into your projects and copy all depedencies. The other thing you can try is to change the class loading policy for the par where the PropertyColumnRenderer & PropertyHeaderRenderer are present.

Search for CoreAccessInAPI in the below document:

http://ww2.avispublicsduparisien.com/irj/portalapps/com.sap.portal.pdk.documentation.services/docs/p...

2. You mostly forgot to add SharingReferences to application in your portalapp.xml, so check this and add necessary applications there.

Regards,

Praveen Gudapati

Former Member
0 Kudos

Hey Praveen,

First of all thanks for the quick response.

To try your first solution, I added all the libs I used to the folder: dist -> PORTAL-INF -> private -> lib. And deployed the par file.

This gives still the same error message: "The given configuration was not used, because the alias is not defined or points to an invalid java class".

About your second solution, I don't know what you mean with 'you forgot to add SharingReferences to applications'. Could you explain this a bit more? Cause this java class ain't using an other application.

Christof

0 Kudos

Hi,

Point 2: You are using LightCollectionRenderer in your class, but I did not see a SharingReference to com.sap.km.cm.ui.flex application in your portalapp.xml.

The basic mistake you do is to add jars where the classes are present to your private lib. The steps you should follow are:

1. If the class you are referenceing is in api part (PORTAL-INF -> Lib) then reference it through SharingReference.

2. If the class is in private part (PORTAL-INF -> private -> lib), then only copy the class into your project and not add the whole jar to your private -> lib folder.

Or you can also try the CoreAccessInAPI trick.

Regards,

Praveen Gudapati