summaryrefslogtreecommitdiff
path: root/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java')
-rw-r--r--support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java166
1 files changed, 0 insertions, 166 deletions
diff --git a/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java b/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java
deleted file mode 100644
index fdd642e21d..0000000000
--- a/support/arara/source/src/main/java/com/github/cereda/arara/utils/ClassLoadingUtils.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * Arara, the cool TeX automation tool
- * Copyright (c) 2012 -- 2019, Paulo Roberto Massa Cereda
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * 3. Neither the name of the project's author 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 HOLDER 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 com.github.cereda.arara.utils;
-
-import com.github.cereda.arara.model.Pair;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-/**
- * Implements utilitary methods for classloading and object instantiation.
- * @author Paulo Roberto Massa Cereda
- * @version 4.0
- * @since 4.0
- */
-public class ClassLoadingUtils {
-
- /**
- * Loads a class from the provided file, potentially a Java archive.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class.
- */
- public static Pair<Integer, Class> loadClass(File file, String name) {
-
- // status and class to be returned,
- // it defaults to an object class
- int status = 0;
- Class value = Object.class;
-
- // if file does not exist, nothing
- // can be done, status is changed
- if (!file.exists()) {
- status = 1;
- } else {
-
- // classloading involves defining
- // a classloader and fetching the
- // desired class from it, based on
- // the provided file archive
- try {
-
- // creates a new classloader with
- // the provided file (potentially
- // a JAR file)
- URLClassLoader classloader = new URLClassLoader(
- new URL[]{
- file.toURI().toURL()
- },
- ClassLoadingUtils.class.getClassLoader()
- );
-
- // fetches the class from the
- // instantiated classloader
- value = Class.forName(name, true, classloader);
-
- } catch (MalformedURLException nothandled1) {
-
- // the file URL is incorrect,
- // update status accordingly
- status = 2;
-
- } catch (ClassNotFoundException nothandled2) {
-
- // the class was not found,
- // update status accordingly
- status = 3;
-
- }
- }
-
- // return a new pair based on the
- // current status and class holder
- return new Pair<Integer, Class>(status, value);
- }
-
- /**
- * Loads a class from the provided file, instantiating it.
- * @param file File containing the Java bytecode (namely, a JAR).
- * @param name The canonical name of the class.
- * @return A pair representing the status and the class object.
- */
- public static Pair<Integer, Object> loadObject(File file, String name) {
-
- // load the corresponding class
- // based on the qualified name
- Pair<Integer, Class> pair = loadClass(file, name);
-
- // status and object to be returned,
- // it defaults to an object
- int status = pair.getFirstElement();
- Object value = new Object();
-
- // checks if the class actually
- // exists, otherwise simply
- // ignore instantiation
- if (status == 0) {
-
- // object instantiation relies
- // on the default constructor
- // (without arguments), class
- // must implement it
-
- // OBS: constructors with arguments
- // must be invoked through reflection
- try {
-
- // get the class reference from
- // the pair and instantiate it
- // by invoking the default
- // constructor (without arguments)
- value = pair.getSecondElement().newInstance();
-
- } catch (IllegalAccessException nothandled1) {
-
- // the object instantiation violated
- // an access policy, status is updated
- status = 4;
-
- } catch (InstantiationException nothandled2) {
-
- // an instantiation exception has
- // occurred, status is updated
- status = 5;
-
- }
- }
-
- // return a new pair based on the
- // current status and object holder
- return new Pair<Integer, Object>(status, value);
- }
-
-}