super.buildCustomizeContext(controller, context, rundata);
JetspeedRunData jdata = (JetspeedRunData)rundata;
PortletSet set = (PortletSet)jdata.getCustomized();
Portlets portlets = jdata.getCustomizedProfile()
.getDocument()
.getPortletsById(set.getID());
List plist = new ArrayList();
List work = new ArrayList();
List filler = Collections.nCopies(portlets.getPortletsCount()+portlets.getEntryCount(),null);
plist.addAll(filler);
for (int i=0; i < portlets.getPortletsCount(); i++)
{
Portlets p = portlets.getPortlets(i);
if (logger.isDebugEnabled())
{
logger.debug("RowColumnControllerAction: processing portlet: " + p.getTitle());
}
Layout layout = p.getLayout();
if (layout == null)
{
// Pane should always have a layout with correct position
if (logger.isDebugEnabled())
{
logger.debug("RowColumnControllerAction: no layout, creating a new one");
}
layout = new PsmlLayout();
layout.setPosition(i);
p.setLayout(layout);
}
if (layout!=null)
{
try
{
int pos = (int)layout.getPosition();
if (logger.isDebugEnabled())
{
logger.debug("RowColumnControllerAction: layout has position: " + pos);
}
if (pos >= 0 && pos < plist.size())
{
plist.set(pos,p);
}
else
{
work.add(p);
}
}
catch (Exception e)
{
logger.error("Layout error", e);
layout.setPosition(-1);
work.add(p);
}
}
else
{
work.add(p);
}
}
for (int i=0; i < portlets.getEntryCount(); i++)
{
Entry p = portlets.getEntry(i);
Layout layout = p.getLayout();
if (layout!=null)
{
try
{
int pos = (int)layout.getPosition();
if (pos>=0)
{
plist.set(pos,p);
}
else
{
work.add(p);
}
}
catch (Exception e)
{
layout.setPosition(-1);
work.add(p);
}
}
else
{
work.add(p);
}
}
Iterator i = work.iterator();
for(int idx=0;idx < plist.size(); idx++)
{
if (plist.get(idx)==null)
{
if (i.hasNext())
{
plist.set(idx,i.next());
}
else
{
plist.remove(idx);
}
}
}
Map titles = new HashMap();
i = plist.iterator();
while(i.hasNext())
{
Object obj = i.next();
if (obj instanceof Portlets)
{
Portlets entry = (Portlets)obj;
if ((entry.getMetaInfo()!=null)&&(entry.getMetaInfo().getTitle()!=null))
{
titles.put(entry.getId(),entry.getMetaInfo().getTitle());
}
}
else
{
Entry entry = (Entry)obj;
if ((entry.getMetaInfo()!=null)&&(entry.getMetaInfo().getTitle()!=null))
{
titles.put(entry.getId(), entry.getMetaInfo().getTitle());
}
else
{
RegistryEntry pentry = Registry.getEntry(Registry.PORTLET,entry.getParent());
if (pentry!=null)
{
titles.put(entry.getId(), pentry.getTitle());
}
}
}
}