blob: 93244ba3987fc26e77f167f01e7d001997f0c36d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.rave.portal.util;
import org.apache.rave.model.*;
import org.apache.rave.portal.model.impl.PageImpl;
import org.apache.rave.portal.model.impl.PageUserImpl;
import org.apache.rave.portal.model.impl.RegionImpl;
import org.apache.rave.portal.model.impl.RegionWidgetImpl;
import java.util.ArrayList;
import java.util.List;
public class PageUtil {
private PageUtil() {}
/**
* Converts a PageTemplate to an instance of a Page
*
* @param template template
* @param owner owner of the new page
* @param createIds optionally set a negative ID as a relative reference
* @return
*/
public static Page convert(PageTemplate template, User owner, boolean createIds) {
Page p = new PageImpl();
if(createIds) {
p.setId(String.valueOf(-1L));
}
p.setName(template.getName());
p.setPageType(template.getPageType());
p.setOwnerId(owner.getId());
PageUser pageUser = new PageUserImpl(owner.getId(), p, template.getRenderSequence());
pageUser.setPageStatus(PageInvitationStatus.OWNER);
pageUser.setEditor(true);
List<PageUser> members = new ArrayList<PageUser>();
members.add(pageUser);
p.setMembers(members);
p.setPageLayout(template.getPageLayout());
p.setRegions(convertRegions(template.getPageTemplateRegions(), p, createIds));
p.setSubPages(convertPages(template.getSubPageTemplates(), p, createIds));
return p;
}
/**
* convertRegions: List of PageTemplateRegion, Page -> List of Regions
* Converts the JpaRegion Templates of the Page Template to Regions for the page
*
* @param pageTemplateRegions List of PageTemplateRegion
* @param page Page
* @param createIds
* @return list of JpaRegion
*/
private static List<Region> convertRegions(List<PageTemplateRegion> pageTemplateRegions, Page page, boolean createIds){
List<Region> regions = new ArrayList<Region>();
int idx = 0;
for (PageTemplateRegion ptr : pageTemplateRegions){
RegionImpl region = new RegionImpl();
if(createIds) {
region.setId(String.valueOf(--idx));
}
region.setRenderOrder((int) ptr.getRenderSequence());
region.setPage(page);
region.setLocked(ptr.isLocked());
region.setRegionWidgets(convertWidgets(ptr.getPageTemplateWidgets(), region, createIds));
region.setProperties(ptr.getProperties());
regions.add(region);
}
return regions;
}
/**
* convertWidgets: List of PageTemplateWidget, JpaRegion -> List of RegionWidget
* Converts the Page Template Widgets to RegionWidgets for the given JpaRegion
*
* @param pageTemplateWidgets List of PageTemplateWidget
* @param region JpaRegion
* @param createIds
* @return List of RegionWidget
*/
private static List<RegionWidget> convertWidgets(List<PageTemplateWidget> pageTemplateWidgets, Region region, boolean createIds){
List<RegionWidget> widgets = new ArrayList<RegionWidget>();
int idx=createIds ? 100 * Integer.parseInt(region.getId()) : 0;
for (PageTemplateWidget ptw : pageTemplateWidgets){
RegionWidgetImpl regionWidget = new RegionWidgetImpl();
if(createIds) {
regionWidget.setId(String.valueOf(--idx));
}
regionWidget.setRegion(region);
regionWidget.setCollapsed(false);
regionWidget.setLocked(ptw.isLocked());
regionWidget.setHideChrome(ptw.isHideChrome());
regionWidget.setRenderOrder((int) ptw.getRenderSeq());
regionWidget.setWidgetId(ptw.getWidgetId());
widgets.add(regionWidget);
}
return widgets;
}
/**
* convertPages: List of PageTemplate, Page -> List of Page
* Converts the template subpages in to a list of Pages for the given page object
* This is a recursive function. A sub page could have a list of sub pages.
*
* @param pageTemplates List of PageTemplate
* @param page Page
* @param createIds
* @return list of Page
*/
private static List<Page> convertPages(List<PageTemplate> pageTemplates, Page page, boolean createIds){
List<Page> pages = new ArrayList<Page>();
//Start at -1 since the first page is already set
int idx=-1;
for(PageTemplate pt : pageTemplates){
PageImpl lPage = new PageImpl();
if(createIds) {
lPage.setId(String.valueOf(--idx));
}
lPage.setName(pt.getName());
lPage.setPageType(pt.getPageType());
lPage.setOwnerId(page.getOwnerId());
lPage.setPageLayout(pt.getPageLayout());
lPage.setParentPage(page);
lPage.setRegions(convertRegions(pt.getPageTemplateRegions(), lPage, createIds));
// create new pageUser tuple
PageUser pageUser = new PageUserImpl(lPage.getOwnerId(), lPage, pt.getRenderSequence());
pageUser.setPageStatus(PageInvitationStatus.OWNER);
pageUser.setEditor(true);
List<PageUser> members = new ArrayList<PageUser>();
members.add(pageUser);
lPage.setMembers(members);
// recursive call
lPage.setSubPages((pt.getSubPageTemplates() == null || pt.getSubPageTemplates().isEmpty()) ? null : convertPages(pt.getSubPageTemplates(), lPage, createIds));
pages.add(lPage);
}
return pages;
}
}