public static SelectionProvider createPagesSelectionProvider (File baseDir, File... excludes) { return createPagesSelectionProvider(baseDir, false, false, excludes); }
/** * Recursively applies a template to a subtree of pages. * @param directory the starting page directory (root of the subtree). * @param filter the filter for selecting pages. * @param edit the object holding template configuration. */ protected void updateTemplate(File directory, FileFilter filter, EditPage edit) { File[] children = directory.listFiles(filter); for(File child : children) { if(!child.getName().equals(PageInstance.DETAIL)) { try { Page page = DispatcherLogic.getPage(child); page.getLayout().setTemplate(edit.template); page.getDetailLayout().setTemplate(edit.detailTemplate); DispatcherLogic.savePage(child, page); } catch (Exception e) { logger.warn("Could not set template of " + child.getAbsolutePath(), e); } } updateTemplate(child, filter, edit); } }
/** * Utility method to save the configuration object to a file in this page's directory. * @param configuration the object to save. It must be in a state that will produce a valid XML document. * @return true if the object was correctly saved, false otherwise. */ protected boolean saveConfiguration(Object configuration) { try { File confFile = DispatcherLogic.saveConfiguration(pageInstance.getDirectory(), configuration); logger.info("Configuration saved to " + confFile.getAbsolutePath()); return true; } catch (Exception e) { logger.error("Couldn't save configuration", e); SessionMessages.addErrorMessage("error saving conf"); return false; } }
public static SelectionProvider createPagesSelectionProvider (File baseDir, boolean includeRoot, boolean includeDetailChildren, File... excludes) { DefaultSelectionProvider selectionProvider = new DefaultSelectionProvider("pages"); if (includeRoot) { Page rootPage; try { rootPage = getPage(baseDir); } catch (Exception e) { throw new RuntimeException("Couldn't load root page", e); } selectionProvider.appendRow("/", rootPage.getTitle() + " (top level)", true); } appendChildrenToPagesSelectionProvider (baseDir, baseDir, null, selectionProvider, includeDetailChildren, excludes); return selectionProvider; }
parentDirectory = pagesDir; directory = new File(parentDirectory, fragment); parentPage = DispatcherLogic.getPage(parentDirectory); parentLayout = parentPage.getLayout(); configurePath = ""; page.getDetailLayout().setTemplate(parentPage.getDetailLayout().getTemplate()); logger.debug("Creating the new child page in directory: {}", directory); DispatcherLogic.savePage(directory, page); if(configuration != null) { DispatcherLogic.saveConfiguration(directory, configuration); DispatcherLogic.savePage(parentDirectory, parentPage); } catch (Exception e) { logger.error("Exception saving page configuration");
/** * Persists a page to the file system. * @param pageInstance the live PageInstance containing the Page to save. * @return the file where the page was saved. * @throws Exception in case the save fails. */ public static File savePage(PageInstance pageInstance) throws Exception { return savePage(pageInstance.getDirectory(), pageInstance.getPage()); }
DispatcherLogic.saveConfiguration(dir, configuration); page.setDescription(calendarTitle); DispatcherLogic.savePage(dir, page); File actionFile = new File(dir, "action.groovy"); try {
public Page getChildPage(String name) throws Exception { File childDirectory = getChildPageDirectory(name); return DispatcherLogic.getPage(childDirectory); }
Page page = DispatcherLogic.getPage(childDirectory); Class<? extends PageAction> actionClass = DispatcherLogic.getActionClass(configuration, childDirectory); try { PageAction pageAction = actionClass.newInstance(); new PageInstance(parentPageInstance, childDirectory, page, actionClass); pageInstance.setActionBean(pageAction); configurePageAction(pageAction, pageInstance); return pageAction; } catch (Exception e) {
Page rootPage = DispatcherLogic.getPage(pagesDirectory); PageInstance pageInstance = new PageInstance(null, pagesDirectory, rootPage, null); PageAction subpage = DispatcherLogic.getSubpage(configuration, pageInstance, pathFragment); if(subpage == null) { logger.error("Page not found: {}", pathFragment);
public static Class<? extends PageAction> getActionClass(Configuration configuration, File directory) { return getActionClass(configuration, directory, true); }
@Override public void handleReset(CacheResetEvent e) { DispatcherLogic.clearConfigurationCache(); } }
protected static void appendChildrenToPagesSelectionProvider (File baseDir, File parentDir, String breadcrumb, DefaultSelectionProvider selectionProvider, boolean includeDetailChildren, File... excludes) { FileFilter filter = new FileFilter() { public boolean accept(File pathname) { return pathname.isDirectory(); } }; for (File dir : parentDir.listFiles(filter)) { try { appendToPagesSelectionProvider (baseDir, dir, breadcrumb, selectionProvider, includeDetailChildren, excludes); } catch (Exception e) { logger.error(e.getMessage(), e); } } }
public static void configurePageAction(PageAction pageAction, PageInstance pageInstance) throws JAXBException, IOException { if(pageInstance.getConfiguration() != null) { logger.debug("Page instance {} is already configured"); return; } File configurationFile = new File(pageInstance.getDirectory(), "configuration.xml"); Class<?> configurationClass = PageActionLogic.getConfigurationClass(pageAction.getClass()); try { Object configuration = getConfiguration(configurationFile, configurationClass); pageInstance.setConfiguration(configuration); } catch (Throwable t) { logger.error("Couldn't load configuration from " + configurationFile.getAbsolutePath(), t); } pageAction.setPageInstance(pageInstance); }
protected void updatePagePermissions(PageInstance page) throws Exception { Permissions pagePermissions = page.getPage().getPermissions(); pagePermissions.getGroups().clear(); Map<String, Group> groups = new HashMap<String, Group>(); for(Map.Entry<String, String> entry : accessLevels.entrySet()) { Group group = new Group(); group.setName(entry.getKey()); group.setAccessLevel(entry.getValue()); groups.put(group.getName(), group); } for(Map.Entry<String, List<String>> custPerm : permissions.entrySet()) { String groupId = custPerm.getKey(); Group group = groups.get(groupId); if(group == null) { group = new Group(); group.setName(groupId); groups.put(groupId, group); } group.getPermissions().addAll(custPerm.getValue()); } for(Group group : groups.values()) { pagePermissions.getGroups().add(group); } DispatcherLogic.savePage(page); }
DispatcherLogic.saveConfiguration(dir, configuration); Page page = new Page(); page.setId(RandomUtil.createRandomId()); DispatcherLogic.savePage(dir, page); File actionFile = new File(dir, "action.groovy"); FileWriter fileWriter = new FileWriter(actionFile);
public Root() { Page rootPage = DispatcherLogic.getPage(pagesDirectory); pageInstance = new PageInstance(null, pagesDirectory, rootPage, null); }
selectionProvider.appendRow ("/" + ElementsFileUtils.getRelativePath(baseDir, file), breadcrumb, true); appendChildrenToPagesSelectionProvider (baseDir, file, breadcrumb, selectionProvider, includeDetailChildren, excludes); Page page; try { page = getPage(file); } catch (Exception e) { throw new RuntimeException("Couldn't load page", e); appendChildrenToPagesSelectionProvider (baseDir, file, breadcrumb, selectionProvider, includeDetailChildren, excludes);
protected void preloadPageActions(File directory) { for(File file : directory.listFiles()) { logger.debug("visit {}", file); if(file.isDirectory()) { if(!file.equals(directory) && !file.equals(directory.getParentFile())) { preloadPageActions(file); } } else if("action.groovy".equals(file.getName())) { logger.debug("Preloading page: {}", file); try { Class<?> clazz = DispatcherLogic.getActionClass(configuration, directory); clazz.newInstance(); } catch(Throwable t) { logger.warn("PageAction preload failed for page " + file.getAbsolutePath(), t); } } } }
File dir = pagesDir; try { newParent = new PageInstance(null, dir, DispatcherLogic.getPage(dir), null); } catch (Exception e) { throw new Error("Couldn't load root page", e); DispatcherLogic.savePage(oldParent.getDirectory(), oldParent.getPage()); logger.debug("Moving directory"); FileUtils.moveDirectory(pageInstance.getDirectory(), newDirectory); FileUtils.copyDirectory(pageInstance.getDirectory(), newDirectory); logger.debug("Generating a new Id for the new page"); Page newPage = DispatcherLogic.getPage(newDirectory); String pageId = RandomUtil.createRandomId(); newPage.setId(pageId); DispatcherLogic.savePage(newDirectory, newPage); DispatcherLogic.savePage(newParent.getDirectory(), newParent.getPage()); } catch (Exception e) { logger.error("Couldn't copy/move page", e);