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
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
=====================================================



+ 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
macrodef=org.apache.tools.ant.taskdefs.MacroDef
nice=org.apache.tools.ant.taskdefs.Nice
issigned=org.apache.tools.ant.taskdefs.IsSigned
libraries=org.apache.tools.ant.taskdefs.repository.Libraries

# 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
libfileset=org.apache.tools.ant.taskdefs.optional.extension.LibFileSet
selector=org.apache.tools.ant.types.selectors.SelectSelector
signedselector=org.apache.tools.ant.types.selectors.SignedSelector
zipfileset=org.apache.tools.ant.types.ZipFileSet
scriptfilter=org.apache.tools.ant.types.optional.ScriptFilter
propertyset=org.apache.tools.ant.types.PropertySet
assertions=org.apache.tools.ant.types.Assertions
concatfilter=org.apache.tools.ant.filters.ConcatFilter
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