Browse Source

Added isSigned condition and task and signedselector selector

PR: 32126
Obtained from: Tarlika Elisabeth Schmitz


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277064 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 20 years ago
parent
commit
070278beb2
6 changed files with 274 additions and 1 deletions
  1. +3
    -0
      WHATSNEW
  2. +95
    -0
      src/main/org/apache/tools/ant/taskdefs/ConditionAndTask.java
  3. +119
    -0
      src/main/org/apache/tools/ant/taskdefs/IsSigned.java
  4. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  5. +2
    -1
      src/main/org/apache/tools/ant/types/defaults.properties
  6. +54
    -0
      src/main/org/apache/tools/ant/types/selectors/SignedSelector.java

+ 3
- 0
WHATSNEW View File

@@ -89,6 +89,9 @@ Other changes:
* <apply> has a new "force" attribute that, when true, disables * <apply> has a new "force" attribute that, when true, disables
checking of target files. checking of target files.


* Added isSigned condition and task, and signedselector selector
Bugzilla report 32126.

Changes from Ant 1.6.2 to current Ant 1.6 CVS version Changes from Ant 1.6.2 to current Ant 1.6 CVS version
===================================================== =====================================================




+ 95
- 0
src/main/org/apache/tools/ant/taskdefs/ConditionAndTask.java View File

@@ -0,0 +1,95 @@
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.tools.ant.taskdefs;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.condition.Condition;

/**
* Abstract task to allow defintion of a task or a condition.
* It has property and value (for the property) attributes.
*
* @since Ant 1.7
*
* @ant.task category="control"
*/
public abstract class ConditionAndTask extends Task implements Condition {

private String property;
private String value = "true";

/**
* Set the name of the property which will be set if the particular resource
* is available.
*
* @param property the name of the property to set.
*/
public void setProperty(String property) {
this.property = property;
}

/**
* Set the value to be given to the property if the desired resource is
* available.
*
* @param value the value to be given.
*/
public void setValue(String value) {
this.value = value;
}

/**
* This method should be overridden by derived classes.
* It is used by eval() to evaluate the condition.
* @return true if the condition passes, false otherwise.
*/
protected abstract boolean evaluate();

/**
* This method evaluates the condition. It calls evaluate in the
* derived class.
* It sets the property if a property is present and if the
* evaluate returns true.
* @return true if the condition passes, false otherwise.
*/
public boolean eval() {
if (evaluate()) {
if (property != null) {
getProject().setNewProperty(property, value);
}
return true;
} else {
return false;
}
}

/**
* Entry point when operating as a task.
*
* @exception BuildException if the task is not configured correctly.
*/
public void execute() throws BuildException {
if (property == null) {
throw new BuildException("property attribute is required",
getLocation());
}
eval();
}

}

+ 119
- 0
src/main/org/apache/tools/ant/taskdefs/IsSigned.java View File

@@ -0,0 +1,119 @@
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.taskdefs;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import java.io.File;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.Enumeration;

/**
* Checks whether a jarfile is signed: if the name of the
* signature is passed, the file is checked for presence of that
* particular signature; otherwise the file is checked for the
* existence of any signature.
*/
public class IsSigned extends ConditionAndTask {

private static final String SIG_START = "META-INF/";
private static final String SIG_END = ".SF";

private String name;
private File file;

/**
* The jarfile that is to be tested for the presence
* of a signature.
*
* @param file jarfile to be tested.
*/
public void setFile(File file) {
this.file = file;
}

/**
* The signature name to check jarfile for.
*
* @param name signature to look for.
*/
public void setName(String name) {
this.name = name;
}

/**
* Returns <CODE>true</code> if the file exists and is signed with
* the signature specified, or, if <CODE>name</code> wasn't
* specified, if the file contains a signature.
* @return true if the file is signed.
*/
protected boolean evaluate() {
if (file == null) {
throw new BuildException("The file attribute must be set.");
}
if (file != null && !file.exists()) {
log("The file \"" + file.getAbsolutePath()
+ "\" does not exist.", Project.MSG_VERBOSE);
return false;
}

ZipFile jarFile = null;
try {
jarFile = new ZipFile(file);
if (null == name) {
Enumeration entries = jarFile.entries();
while (entries.hasMoreElements()) {
String name = ((ZipEntry) entries.nextElement()).getName();
if (name.startsWith(SIG_START) && name.endsWith(SIG_END)) {
log("File \"" + file.getAbsolutePath()
+ "\" is signed.", Project.MSG_VERBOSE);
return true;
}
}
return false;
} else {
boolean shortSig = jarFile.getEntry(SIG_START
+ name.toUpperCase()
+ SIG_END) != null;
boolean longSig = jarFile.getEntry(SIG_START
+ name.substring(0, 8).toUpperCase()
+ SIG_END) != null;
if (shortSig || longSig) {
log("File \"" + file.getAbsolutePath()
+ "\" is signed.", Project.MSG_VERBOSE);
return true;
} else {
return false;
}
}
} catch (IOException e) {
log("Got IOException reading file \"" + file.getAbsolutePath()
+ "\"" + e, Project.MSG_VERBOSE);
return false;
} finally {
if (jarFile != null) {
try {
jarFile.close();
} catch (IOException e) {
// Ignored
}
}
}
}
}

+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -80,6 +80,7 @@ defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes
presetdef=org.apache.tools.ant.taskdefs.PreSetDef presetdef=org.apache.tools.ant.taskdefs.PreSetDef
macrodef=org.apache.tools.ant.taskdefs.MacroDef macrodef=org.apache.tools.ant.taskdefs.MacroDef
nice=org.apache.tools.ant.taskdefs.Nice nice=org.apache.tools.ant.taskdefs.Nice
issigned=org.apache.tools.ant.taskdefs.IsSigned
libraries=org.apache.tools.ant.taskdefs.repository.Libraries libraries=org.apache.tools.ant.taskdefs.repository.Libraries


# optional tasks # optional tasks


+ 2
- 1
src/main/org/apache/tools/ant/types/defaults.properties View File

@@ -28,10 +28,11 @@ extensionSet=org.apache.tools.ant.taskdefs.optional.extension.ExtensionSet
extension=org.apache.tools.ant.taskdefs.optional.extension.ExtensionAdapter extension=org.apache.tools.ant.taskdefs.optional.extension.ExtensionAdapter
libfileset=org.apache.tools.ant.taskdefs.optional.extension.LibFileSet libfileset=org.apache.tools.ant.taskdefs.optional.extension.LibFileSet
selector=org.apache.tools.ant.types.selectors.SelectSelector selector=org.apache.tools.ant.types.selectors.SelectSelector
signedselector=org.apache.tools.ant.types.selectors.SignedSelector
zipfileset=org.apache.tools.ant.types.ZipFileSet zipfileset=org.apache.tools.ant.types.ZipFileSet
scriptfilter=org.apache.tools.ant.types.optional.ScriptFilter scriptfilter=org.apache.tools.ant.types.optional.ScriptFilter
propertyset=org.apache.tools.ant.types.PropertySet propertyset=org.apache.tools.ant.types.PropertySet
assertions=org.apache.tools.ant.types.Assertions assertions=org.apache.tools.ant.types.Assertions
concatfilter=org.apache.tools.ant.filters.ConcatFilter concatfilter=org.apache.tools.ant.filters.ConcatFilter
ispingable=org.apache.tools.ant.taskdefs.optional.condition.IsPingable ispingable=org.apache.tools.ant.taskdefs.optional.condition.IsPingable
mavenrepository=org.apache.tools.ant.taskdefs.repository.MavenRepository
mavenrepository=org.apache.tools.ant.taskdefs.optional.repository.MavenRepository

+ 54
- 0
src/main/org/apache/tools/ant/types/selectors/SignedSelector.java View File

@@ -0,0 +1,54 @@
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.tools.ant.types.selectors;
import java.io.File;
import org.apache.tools.ant.types.DataType;
import org.apache.tools.ant.taskdefs.IsSigned;

/**
* Selector that chooses files based on whether they are signed or not.
*
* @since 1.7
*/
public class SignedSelector extends DataType implements FileSelector {
IsSigned isSigned = new IsSigned();

/**
* The signature name to check jarfile for.
*
* @param name signature to look for.
*/
public void setName(String name) {
isSigned.setName(name);
}

/**
* The heart of the matter. This is where the selector gets to decide
* on the inclusion of a file in a particular fileset.
*
* @param basedir the base directory the scan is being done from
* @param filename is the name of the file to check
* @param file is a java.io.File object the selector can use
* @return whether the file should be selected or not
*/
public boolean isSelected(File basedir, String filename, File file) {
isSigned.setProject(getProject());
isSigned.setFile(file);
return isSigned.eval();
}
}

Loading…
Cancel
Save