You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by st...@apache.org on 2008/01/15 12:06:16 UTC
svn commit: r612079 -
/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
Author: stevel
Date: Tue Jan 15 03:06:13 2008
New Revision: 612079
URL: http://svn.apache.org/viewvc?rev=612079&view=rev
Log:
bug 44241 add JavaConstantResource to read string constants.
Added:
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java (with props)
Added: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java?rev=612079&view=auto
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java (added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java Tue Jan 15 03:06:13 2008
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2008 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.resources;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ByteArrayInputStream;
+import java.lang.reflect.Field;
+
+/**
+ * A resource that is a java constant.
+ * This lets you extract values off the classpath and use them elsewhere
+ * @since Ant1.7
+ *
+ */
+
+public class JavaConstantResource extends AbstractClasspathResource {
+ /**
+ * open the inpout stream from a specific classloader
+ *
+ * @param cl the classloader to use. Will be null if the system classloader is used
+ * @return an open input stream for the resource
+ * @throws IOException if an error occurs.
+ */
+ protected InputStream openInputStream(ClassLoader cl) throws IOException {
+ Class clazz;
+ String constant = getName();
+ int index1 = constant.lastIndexOf('.');
+ if (index1 < 0) {
+ throw new IOException("No class name in " + constant);
+ }
+ int index = index1;
+ String classname = constant.substring(0, index);
+ String fieldname = constant.substring(index + 1, constant.length());
+ try {
+ clazz = cl!=null?Class.forName(classname,true,cl):Class.forName(classname);
+ Field field = clazz.getField(fieldname);
+ String value=field.get(null).toString();
+ return new ByteArrayInputStream(value.getBytes("UTF-8"));
+ } catch (ClassNotFoundException e) {
+ throw new IOException("Class not found:"+ classname);
+ } catch (NoSuchFieldException e) {
+ throw new IOException("Field not found:" + fieldname+ " in "+classname);
+ } catch (IllegalAccessException e) {
+ throw new IOException("Illegal access to :" + fieldname + " in " + classname);
+ } catch (NullPointerException npe) {
+ throw new IOException("Not a static field: " + fieldname + " in " + classname);
+ }
+ }
+
+
+}
Propchange: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java
------------------------------------------------------------------------------
svn:eol-style = native