Coverage Summary for Class: RulesetForm (org.kitodo.production.forms)

Class Class, % Method, % Line, %
RulesetForm 0% (0/1) 0% (0/13) 0% (0/57)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.production.forms;
 
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.enterprise.context.SessionScoped;
 import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.kitodo.config.ConfigCore;
 import org.kitodo.config.enums.ParameterCore;
 import org.kitodo.data.database.beans.Ruleset;
 import org.kitodo.data.database.exceptions.DAOException;
 import org.kitodo.data.exceptions.DataException;
 import org.kitodo.production.enums.ObjectType;
 import org.kitodo.production.helper.Helper;
 import org.kitodo.production.model.LazyDTOModel;
 import org.kitodo.production.services.ServiceManager;
 
 @Named("RulesetForm")
 @SessionScoped
 public class RulesetForm extends BaseForm {
     private Ruleset ruleset;
     private static final Logger logger = LogManager.getLogger(RulesetForm.class);
 
     private final String rulesetEditPath = MessageFormat.format(REDIRECT_PATH, "rulesetEdit");
 
     @Named("ProjectForm")
     private final ProjectForm projectForm;
 
     /**
      * Default constructor with inject project form that also sets the LazyDTOModel
      * instance of this bean.
      *
      * @param projectForm
      *            managed bean
      */
     @Inject
     public RulesetForm(ProjectForm projectForm) {
         super();
         super.setLazyDTOModel(new LazyDTOModel(ServiceManager.getRulesetService()));
         this.projectForm = projectForm;
     }
 
     /**
      * Initialize new Ruleset.
      *
      * @return page
      */
     public String createNewRuleset() {
         this.ruleset = new Ruleset();
         this.ruleset.setClient(ServiceManager.getUserService().getSessionClientOfAuthenticatedUser());
         return rulesetEditPath;
     }
 
     /**
      * Save.
      *
      * @return page or empty String
      */
     public String save() {
         try {
             if (hasValidRulesetFilePath(this.ruleset, ConfigCore.getParameter(ParameterCore.DIR_RULESETS))) {
                 if (existsRulesetWithSameName()) {
                     Helper.setErrorMessage("rulesetTitleDuplicated");
                     return this.stayOnCurrentPage;
                 }
                 ServiceManager.getRulesetService().save(this.ruleset);
                 return projectsPage;
             } else {
                 Helper.setErrorMessage("rulesetNotFound", new Object[] {this.ruleset.getFile()});
                 return this.stayOnCurrentPage;
             }
         } catch (DataException e) {
             Helper.setErrorMessage(ERROR_SAVING, new Object[] {ObjectType.RULESET.getTranslationSingular() }, logger,
                 e);
             return this.stayOnCurrentPage;
         }
     }
 
     /**
      * Delete ruleset.
      */
     public void delete() {
         try {
             if (hasAssignedProcessesOrTemplates(this.ruleset.getId())) {
                 Helper.setErrorMessage("rulesetInUse");
             } else {
                 ServiceManager.getRulesetService().remove(this.ruleset);
             }
         } catch (DataException e) {
             Helper.setErrorMessage(ERROR_DELETING, new Object[] {ObjectType.RULESET.getTranslationSingular() }, logger,
                     e);
         }
     }
 
     /**
      * Checks that ruleset file exists.
      *
      * @param ruleset
      *            ruleset
      * @param pathToRulesets
      *            path to ruleset
      * @return true if ruleset file exists
      */
     private boolean hasValidRulesetFilePath(Ruleset ruleset, String pathToRulesets) {
         File rulesetFile = new File(pathToRulesets + ruleset.getFile());
         return rulesetFile.exists();
     }
 
     private boolean existsRulesetWithSameName() {
         List<Ruleset> rulesets = ServiceManager.getRulesetService().getByTitle(this.ruleset.getTitle())
                 .stream().filter(r -> r.getClient().equals(this.ruleset.getClient())).collect(Collectors.toList());
         if (rulesets.isEmpty()) {
             return false;
         } else {
             if (Objects.nonNull(this.ruleset.getId())) {
                 if (rulesets.size() == 1) {
                     return !rulesets.get(0).getId().equals(this.ruleset.getId());
                 } else {
                     return true;
                 }
             } else {
                 return true;
             }
         }
     }
 
     private boolean hasAssignedProcessesOrTemplates(int rulesetId) throws DataException {
         return !ServiceManager.getProcessService().findByRuleset(rulesetId).isEmpty()
                 || !ServiceManager.getTemplateService().findByRuleset(rulesetId).isEmpty();
     }
 
     /**
      * Method being used as viewAction for ruleset edit form. If given parameter
      * 'id' is '0', the form for creating a new ruleset will be displayed.
      *
      * @param id
      *            ID of the ruleset to load
      */
     public void load(int id) {
         try {
             if (!Objects.equals(id, 0)) {
                 setRuleset(ServiceManager.getRulesetService().getById(id));
             }
             setSaveDisabled(true);
         } catch (DAOException e) {
             Helper.setErrorMessage(ERROR_LOADING_ONE, new Object[] {ObjectType.RULESET.getTranslationSingular(), id },
                 logger, e);
         }
     }
 
     /*
      * Getter und Setter
      */
 
     public Ruleset getRuleset() {
         return this.ruleset;
     }
 
     public void setRuleset(Ruleset inPreference) {
         this.ruleset = inPreference;
     }
 
     /**
      * Set ruleset by ID.
      *
      * @param rulesetID
      *            ID of the ruleset to set.
      */
     public void setRulesetById(int rulesetID) {
         try {
             setRuleset(ServiceManager.getRulesetService().getById(rulesetID));
         } catch (DAOException e) {
             Helper.setErrorMessage(ERROR_LOADING_ONE,
                 new Object[] {ObjectType.RULESET.getTranslationSingular(), rulesetID }, logger, e);
         }
     }
 
     /**
      * Get list of ruleset filenames.
      *
      * @return list of ruleset filenames
      */
     public List<Path> getRulesetFilenames() {
         try (Stream<Path> rulesetPaths = Files.walk(Paths.get(ConfigCore.getParameter(ParameterCore.DIR_RULESETS)))) {
             return rulesetPaths.filter(f -> f.toString().endsWith(".xml")).map(Path::getFileName).sorted()
                     .collect(Collectors.toList());
         } catch (IOException e) {
             Helper.setErrorMessage(ERROR_LOADING_MANY, new Object[] {ObjectType.RULESET.getTranslationPlural() },
                 logger, e);
             return new ArrayList<>();
         }
     }
 }