WCP: Get the Page Variants of a Page
I decided to create this blog post based on a quesiton I found on OTN WebCenter Portal Forum.
[Source Page Name] + "_" + [Device Group Name] + "jspx"
Using the following code snippet you can get the Page Variants for the Current Page and then modify it as desired :)
How to retrieve the Page Variants from a given Page Path programatically?
Page Variants are created in the same folder of the Page and it uses the following naming convenion:[Source Page Name] + "_" + [Device Group Name] + "jspx"
Using the following code snippet you can get the Page Variants for the Current Page and then modify it as desired :)
public void changeVariantsOfCurrentPage() {
// Get Page Service for editing Page Attributes
PageService pageService = getEditModePageService();
// Get Current Page Path
final String pagePath = (String)ADFContext.getCurrent().getExpressionEvaluator().evaluate("#{pageDocBean.pagePath}");
if ((pagePath != null) && (pagePath.length() > 0)) {
// For each possible Device Agent detect if it has a pageVariant
List<DeviceGroup> allDeviceGroups = getAllDeviceGroups();
for (DeviceGroup dg : allDevicesGroups) {
int iLastSlash = pagePath.lastIndexOf('/');
int iLastDot = pagePath.lastIndexOf('.');
String srcFolderPath = pagePath.substring(0, iLastSlash + 1);
String srcPageName = pagePath.substring(iLastSlash + 1, iLastDot);
String newPageTitle = pageService.getPage(pagePath).getTitle();
String pageNameFormat = srcPageName + "_" + dg.getName() + ".jspx";
String variantPagePath = srcFolderPath + pageNameFormat;
PageDef variantPage = getEditModePageService().getPageDefAttributes(variantPagePath);
// TODO: Check if it is not null and apply changes
pageService.updatePageDefAttributes(variantPage);
pageService.saveChanges();
}
}
}
private PageService getEditModePageService() {
if (this.pageService == null) {
MDSSession sess = getEditModeMDSSession();
this.pageService = PageServiceFactory.createInstance(new PageServiceConfig(sess, ServiceContext().getContext().getScope().getName()));
}
return this.pageService;
}
private MDSSession getEditModeMDSSession() {
if (this.editSess == null) {
this.editSess = WCApplicationContext.getCurrentInstance().createEditModeMDSSession();
}
return this.editSess;
}
private List<DeviceGroup> getAllDeviceGroups() {
List<DeviceGroup> deviceGroups = null;
try {
DeviceSupport deviceSupport = DeviceSupport.getInstance();
deviceGroups = deviceSupport.getAllDeviceGroups(ServiceContext.getContext().getScope());
}
catch (Exception e) {
// TODO: Log
}
return deviceGroups;
}
Comments
Post a Comment