All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.module.CmsModuleResourceChecker Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (C) Alkacon Software (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.module;

import org.opencms.util.CmsFileUtil;
import org.opencms.util.CmsFileUtil.FileWalkState;
import org.opencms.util.CmsStringUtil;

import java.io.File;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.collections.Closure;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * Helper class to list files in modules which are missing from the modules' manifests.

*/ public class CmsModuleResourceChecker { /** Default module path . */ public static final String DEFAULT_MODULE_PATH = "C:/dev/workspace/opencms/modules"; /** * Main method.

* @param args first argument should be the path of the modules folder * * @throws Exception if something goes wrong */ public static void main(String[] args) throws Exception { String path = args.length > 0 ? args[0] : DEFAULT_MODULE_PATH; (new CmsModuleResourceChecker()).checkAllModules(path); } /** * Checks all modules for missing manifest entries.

* * @param modulesPath the path of the module folder * @throws Exception if something goes wrong */ public void checkAllModules(String modulesPath) throws Exception { File modules = new File(modulesPath); for (File file : modules.listFiles()) { if (file.isDirectory()) { checkModule(modules.getAbsolutePath(), file.getName()); } } } /** * Checks a single module for missing manifest entries.

* * @param basePath the modules folder path * @param module the module name * @throws Exception */ public void checkModule(String basePath, String module) throws Exception { String manifest = CmsStringUtil.joinPaths(basePath, module, "resources/manifest.xml"); String resourcePath = CmsStringUtil.joinPaths(basePath, module, "/resources"); Set missing = getMissingPaths(manifest, resourcePath); if (!missing.isEmpty()) { System.out.println(module + " lacks manifest entries for: "); for (String path : missing) { System.out.println(" " + path); } } } /** * Finds the missing paths for a single module.

* * @param manifest the path of the manifest * @param baseFolder the path of the module resources folder * @return the set of missing paths * * @throws Exception if something goes wrong */ public Set getMissingPaths(String manifest, final String baseFolder) throws Exception { final Set manifestPaths = new HashSet(); final Set filePaths = new HashSet(); final String basePath = new File(baseFolder).getAbsolutePath(); SAXReader reader = new SAXReader(); Document doc = reader.read(new File(manifest)); List nodes = doc.selectNodes("//export/files/file/source"); for (Object node : nodes) { Element elem = (Element)node; String path = elem.getText().trim(); path = CmsStringUtil.joinPaths("/", path); manifestPaths.add(path); } CmsFileUtil.walkFileSystem(new File(baseFolder), new Closure() { public void execute(Object obj) { FileWalkState state = (FileWalkState)obj; for (File file : state.getFiles()) { String path = file.getAbsolutePath().substring(basePath.length()); path = path.replace('\\', '/'); filePaths.add(path); } } }); Set diff = new HashSet(filePaths); diff.removeAll(manifestPaths); diff.remove("/manifest.xml"); return diff; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy