// Path: h2hell-core/src/main/java/com/highway2urhell/VersionUtils.java
// public class VersionUtils {
// 
//     public static final String UNKNOWN_VERSION = "UNKNOWN";
//     public static final String NO_FRAMEWORK = "NO_FRAMEWORK";
// 
//     private VersionUtils() {
//     }
// 
//     public static String getVersion(String clazzName, String groupId, String artifactId) {
//         //check
//         Class<?> clazz;
//         try {
//             clazz = Class.forName(clazzName);
//         } catch (ClassNotFoundException e1) {
//             return NO_FRAMEWORK;
//         }
//         String version = null;
// 
//         // try to load from maven properties first
//         Properties p = new Properties();
//         InputStream is = null;
// 
//         try {
//             is = clazz.getResourceAsStream("/META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties");
//             if (is != null) {
//                 p.load(is);
//                 version = p.getProperty("version", "");
//             }
//         } catch (Exception e) {
//             // ignore
//         } finally {
//             if (is != null) {
//                 try {
//                     is.close();
//                 } catch (IOException e) {
//                     // ignore
//                 }
//             }
//         }
// 
//         // try to load from manifest
//         try {
//             URL clazzRes = clazz.getResource('/' + clazz.getName().replace('.', '/') + ".class");
//             String classResPath = clazzRes.getPath();
//             Manifest manifest = null;
//             if (classResPath.contains("!")) {
//                 classResPath = classResPath.split("!")[0];
//                 URL url = new URL("jar:" + classResPath + "!/");
//                 JarURLConnection jarConnection = (JarURLConnection) url.openConnection();
//                 manifest = jarConnection.getManifest();
//             } else {
//                 is = clazz.getResourceAsStream(classResPath + "!/META-INF/MANIFEST.MF");
//                 if (is != null)
//                     manifest = new Manifest(is);
// 
//             }
//             if (manifest != null) {
//                 Attributes attr = manifest.getMainAttributes();
//                 version = attr.getValue("Implementation-Version");
//             }
//         } catch (Exception e) {
//             // ignore
//         } finally {
//             if (is != null) {
//                 try {
//                     is.close();
//                 } catch (IOException e) {
//                     // ignore
//                 }
//             }
//         }
// 
// 
//         // fallback to using Java API
//         if (version == null) {
//             Package aPackage = clazz.getPackage();
//             if (aPackage != null) {
//                 version = aPackage.getImplementationVersion();
//                 if (version == null) {
//                     version = aPackage.getSpecificationVersion();
//                 }
//             }
//         }
//         if (version == null) {
//             // we could not compute the version so use a blank
//             version = UNKNOWN_VERSION;
//         }
// 
//         return version;
//     }
// 
// }
// 
// Path: h2hell-core/src/main/java/com/highway2urhell/service/AbstractLeechService.java
// public abstract class AbstractLeechService implements LeechService {
// 
//     private FrameworkInformations frameworkInformations = new FrameworkInformations();
//     private boolean triggeredAtStartup = false;
// 
//     public AbstractLeechService(String frameworkName) {
//         frameworkInformations.setFrameworkName(frameworkName);
//     }
// 
//     public AbstractLeechService(String frameworkName, String version) {
//         this(frameworkName);
//         frameworkInformations.setVersion(version);
//     }
// 
//     @Override
//     public boolean isTriggeredAtStartup() {
//         return triggeredAtStartup;
//     }
// 
//     protected void setTriggerAtStartup(boolean triggeredAtStartup) {
//         this.triggeredAtStartup = triggeredAtStartup;
//     }
// 
//     public void receiveData(List<EntryPathData> incoming) {
//         clearPreviousData();
//         System.out.println("receive incoming data obj "+ incoming+ "for framework "+frameworkInformations.getFrameworkName());
//         gatherData(incoming);
//         System.out.println("data gathering complete. Found entries "+frameworkInformations.getListEntryPath().size());
//     }
// 
//     private void clearPreviousData() {
//         frameworkInformations.getListEntryPath().clear();
//     }
// 
// 
//     protected void gatherData(List<EntryPathData> incoming) {
//         List<EntryPathData> listEntryPath = incoming;
//         for (EntryPathData entry : listEntryPath) {
//             if (entry.getMethodName() != null && !entry.getMethodName().contains("$")) {
//                 addEntryPath(entry);
//             }
//         }
//     }
// 
//     @Override
//     public FrameworkInformations getFrameworkInformations() {
//         return frameworkInformations;
//     }
// 
//     protected void addEntryPath(EntryPathData entryPath) {
//         frameworkInformations.getListEntryPath().add(entryPath);
//     }
// 
//     public String getInternalSignature(String className, String methodName) {
//         String res = "";
//         try {
//             Class<?> c = Class.forName(className);
//             for (Method m : c.getDeclaredMethods()) {
//                 if (m.getName().equals(methodName)) {
//                     res = Type.getMethodDescriptor(m);
//                 }
//             }
// 
//         } catch (ClassNotFoundException e) {
//             System.err.println("Can't construct classname " + className+" : "+ e);
//         }
// 
//         return res;
//     }
// 
//     public String getInternalSignature(Method m) {
//         return Type.getMethodDescriptor(m);
//     }
// }


import com.highway2urhell.VersionUtils;
import com.highway2urhell.service.AbstractLeechService;
package com.highway2urhell.service.impl;


public class Struts2Service extends AbstractLeechService {

    public static final String FRAMEWORK_NAME = "STRUTS_2";

    public Struts2Service() {
// Path: h2hell-core/src/main/java/com/highway2urhell/VersionUtils.java
// public class VersionUtils {
// 
//     public static final String UNKNOWN_VERSION = "UNKNOWN";
//     public static final String NO_FRAMEWORK = "NO_FRAMEWORK";
// 
//     private VersionUtils() {
//     }
// 
//     public static String getVersion(String clazzName, String groupId, String artifactId) {
//         //check
//         Class<?> clazz;
//         try {
//             clazz = Class.forName(clazzName);
//         } catch (ClassNotFoundException e1) {
//             return NO_FRAMEWORK;
//         }
//         String version = null;
// 
//         // try to load from maven properties first
//         Properties p = new Properties();
//         InputStream is = null;
// 
//         try {
//             is = clazz.getResourceAsStream("/META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties");
//             if (is != null) {
//                 p.load(is);
//                 version = p.getProperty("version", "");
//             }
//         } catch (Exception e) {
//             // ignore
//         } finally {
//             if (is != null) {
//                 try {
//                     is.close();
//                 } catch (IOException e) {
//                     // ignore
//                 }
//             }
//         }
// 
//         // try to load from manifest
//         try {
//             URL clazzRes = clazz.getResource('/' + clazz.getName().replace('.', '/') + ".class");
//             String classResPath = clazzRes.getPath();
//             Manifest manifest = null;
//             if (classResPath.contains("!")) {
//                 classResPath = classResPath.split("!")[0];
//                 URL url = new URL("jar:" + classResPath + "!/");
//                 JarURLConnection jarConnection = (JarURLConnection) url.openConnection();
//                 manifest = jarConnection.getManifest();
//             } else {
//                 is = clazz.getResourceAsStream(classResPath + "!/META-INF/MANIFEST.MF");
//                 if (is != null)
//                     manifest = new Manifest(is);
// 
//             }
//             if (manifest != null) {
//                 Attributes attr = manifest.getMainAttributes();
//                 version = attr.getValue("Implementation-Version");
//             }
//         } catch (Exception e) {
//             // ignore
//         } finally {
//             if (is != null) {
//                 try {
//                     is.close();
//                 } catch (IOException e) {
//                     // ignore
//                 }
//             }
//         }
// 
// 
//         // fallback to using Java API
//         if (version == null) {
//             Package aPackage = clazz.getPackage();
//             if (aPackage != null) {
//                 version = aPackage.getImplementationVersion();
//                 if (version == null) {
//                     version = aPackage.getSpecificationVersion();
//                 }
//             }
//         }
//         if (version == null) {
//             // we could not compute the version so use a blank
//             version = UNKNOWN_VERSION;
//         }
// 
//         return version;
//     }
// 
// }
// 
// Path: h2hell-core/src/main/java/com/highway2urhell/service/AbstractLeechService.java
// public abstract class AbstractLeechService implements LeechService {
// 
//     private FrameworkInformations frameworkInformations = new FrameworkInformations();
//     private boolean triggeredAtStartup = false;
// 
//     public AbstractLeechService(String frameworkName) {
//         frameworkInformations.setFrameworkName(frameworkName);
//     }
// 
//     public AbstractLeechService(String frameworkName, String version) {
//         this(frameworkName);
//         frameworkInformations.setVersion(version);
//     }
// 
//     @Override
//     public boolean isTriggeredAtStartup() {
//         return triggeredAtStartup;
//     }
// 
//     protected void setTriggerAtStartup(boolean triggeredAtStartup) {
//         this.triggeredAtStartup = triggeredAtStartup;
//     }
// 
//     public void receiveData(List<EntryPathData> incoming) {
//         clearPreviousData();
//         System.out.println("receive incoming data obj "+ incoming+ "for framework "+frameworkInformations.getFrameworkName());
//         gatherData(incoming);
//         System.out.println("data gathering complete. Found entries "+frameworkInformations.getListEntryPath().size());
//     }
// 
//     private void clearPreviousData() {
//         frameworkInformations.getListEntryPath().clear();
//     }
// 
// 
//     protected void gatherData(List<EntryPathData> incoming) {
//         List<EntryPathData> listEntryPath = incoming;
//         for (EntryPathData entry : listEntryPath) {
//             if (entry.getMethodName() != null && !entry.getMethodName().contains("$")) {
//                 addEntryPath(entry);
//             }
//         }
//     }
// 
//     @Override
//     public FrameworkInformations getFrameworkInformations() {
//         return frameworkInformations;
//     }
// 
//     protected void addEntryPath(EntryPathData entryPath) {
//         frameworkInformations.getListEntryPath().add(entryPath);
//     }
// 
//     public String getInternalSignature(String className, String methodName) {
//         String res = "";
//         try {
//             Class<?> c = Class.forName(className);
//             for (Method m : c.getDeclaredMethods()) {
//                 if (m.getName().equals(methodName)) {
//                     res = Type.getMethodDescriptor(m);
//                 }
//             }
// 
//         } catch (ClassNotFoundException e) {
//             System.err.println("Can't construct classname " + className+" : "+ e);
//         }
// 
//         return res;
//     }
// 
//     public String getInternalSignature(Method m) {
//         return Type.getMethodDescriptor(m);
//     }
// }


// Path: h2hell-core/src/main/java/com/highway2urhell/service/impl/Struts2Service.java
import com.highway2urhell.VersionUtils;
import com.highway2urhell.service.AbstractLeechService;

package com.highway2urhell.service.impl;


public class Struts2Service extends AbstractLeechService {

    public static final String FRAMEWORK_NAME = "STRUTS_2";

    public Struts2Service() {
        super(FRAMEWORK_NAME, VersionUtils.getVersion(