/* * Created on 21 nov. 2004 * * Copyright (c) 2004, PMD for Eclipse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * The end-user documentation included with the redistribution, if * any, must include the following acknowledgement: * "This product includes software developed in part by support from * the Defense Advanced Research Project Agency (DARPA)" * * Neither the name of "PMD for Eclipse Development Team" nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package net.sourceforge.pmd.eclipse.ui.properties; import name.herlin.command.CommandException; import net.sourceforge.pmd.RuleSet; import net.sourceforge.pmd.eclipse.runtime.cmd.AbstractProjectCommand; import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties; import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException; import org.eclipse.ui.IWorkingSet; /** * Save updated project properties. This is a composite command. * * @author Philippe Herlin * */ public class UpdateProjectPropertiesCmd extends AbstractProjectCommand { private static final long serialVersionUID = 1L; // private IProject project; private boolean pmdEnabled; private IWorkingSet projectWorkingSet; private RuleSet projectRuleSet; private boolean ruleSetStoredInProject; private String ruleSetFile; private boolean needRebuild; private boolean ruleSetFileExists; private boolean includeDerivedFiles; private boolean fullBuildEnabled = true; private boolean violationsAsErrors = true; /** * Default constructor. Initializes command attributes * */ public UpdateProjectPropertiesCmd() { super("UpdateProjectProperties", "Update a project PMD specific properties."); setReadOnly(false); setOutputProperties(true); setTerminated(false); } /** * @see name.herlin.command.AbstractProcessableCommand#execute() */ public void execute() throws CommandException { try { final IProjectProperties properties = projectProperties(); properties.setPmdEnabled(pmdEnabled); properties.setProjectRuleSet(projectRuleSet); properties.setProjectWorkingSet(projectWorkingSet); properties.setRuleSetStoredInProject(ruleSetStoredInProject); properties.setRuleSetFile(ruleSetFile); properties.setIncludeDerivedFiles(includeDerivedFiles); properties.setFullBuildEnabled(fullBuildEnabled); properties.setViolationsAsErrors(violationsAsErrors); properties.sync(); needRebuild = properties.isNeedRebuild(); ruleSetFileExists = !properties.isRuleSetFileExist(); } catch (PropertiesException e) { throw new CommandException(e.getMessage(), e); } finally { setTerminated(true); } } /** * @param pmdEnabled The pmdEnabled to set. */ public void setPmdEnabled(final boolean pmdEnabled) { this.pmdEnabled = pmdEnabled; } /** * @param projectRuleSet The projectRuleSet to set. */ public void setProjectRuleSet(final RuleSet projectRuleSet) { this.projectRuleSet = projectRuleSet; } /** * @param projectWorkingSet The projectWorkingSet to set. */ public void setProjectWorkingSet(final IWorkingSet projectWorkingSet) { this.projectWorkingSet = projectWorkingSet; } /** * @param ruleSetStoredInProject The ruleSetStoredInProject to set. */ public void setRuleSetStoredInProject(final boolean ruleSetStoredInProject) { this.ruleSetStoredInProject = ruleSetStoredInProject; } /** * @param ruleSetFile The ruleSetFile to set. */ public void setRuleSetFile(String ruleSetFile) { this.ruleSetFile = ruleSetFile; } /** * @param includeDerivedFiles The includeDerivedFiles to set. */ public void setIncludeDerivedFiles(boolean includeDerivedFiles) { this.includeDerivedFiles = includeDerivedFiles; } /** * * @param fullBuildEnabled run at full build setter */ public void setFullBuildEnabled(boolean fullBuildEnabled){ this.fullBuildEnabled = fullBuildEnabled; } /** * @param violationsAsErrors The violationsAsErrors to set. */ public void setViolationsAsErrors(boolean violationsAsErrors) { this.violationsAsErrors = violationsAsErrors; } /** * @return Returns the needRebuild. */ public boolean isNeedRebuild() { return needRebuild && fullBuildEnabled; } /** * @return Returns the ruleSetFileExists. */ public boolean isRuleSetFileExists() { return ruleSetFileExists; } /** * @see name.herlin.command.Command#reset() */ public void reset() { setProject(null); setPmdEnabled(false); setProjectRuleSet(null); setRuleSetStoredInProject(false); setRuleSetFile(null); setIncludeDerivedFiles(false); setFullBuildEnabled(true); // made to match static initializer setViolationsAsErrors(true); // 10/2010 changed to true to match static initializer setTerminated(false); } /** * @see name.herlin.command.Command#isReadyToExecute() */ public boolean isReadyToExecute() { return super.isReadyToExecute() && projectRuleSet != null; } }