// Path: app/src/main/java/it/unisannio/security/DoApp/model/IntentDataInfo.java
// public class IntentDataInfo extends IntentFilter.IntentData{
// 
//     private AndroidComponent component;
//     private String packageName;
//     private IntentFilter filter; //intent-filter in which is declared the <data> field
// 
//     public IntentDataInfo(IntentFilter.IntentData data, AndroidComponent component, String packageName, IntentFilter filter) {
//         super(data.scheme, data.host, data.port, data.path, data.pathPattern, data.pathPrefix, data.mimeType, data.type);
//         this.component = component;
//         this.packageName = packageName;
//         this.filter = filter;
//     }
// 
//     public AndroidComponent getComponent(){
//         return component;
//     }
// 
//     public void setComponent(AndroidComponent component){
//         this.component = component;
//     }
// 
//     public String getPackageName() {
//         return packageName;
//     }
// 
//     public void setPackageName(String packageName) {
//         this.packageName = packageName;
//     }
// 
//     public IntentFilter getFilter() {
//         return filter;
//     }
// 
//     public void setFilter(IntentFilter filter) {
//         this.filter = filter;
//     }
// }
// 
// Path: app/src/main/java/it/unisannio/security/DoApp/model/MalIntent.java
// public class MalIntent extends Intent{
// 
//     private AndroidComponent targetComponent;
// 
//     public MalIntent(IntentDataInfo datafield){
//         super();
//         this.targetComponent = datafield.getComponent();
//         String packageName = datafield.getPackageName();
// 
//         // se il nome inizia per '.' è necessario creare il nome completo del componente
//         // altrimenti si va in ActivityNotFoundException durante lo startActivity()
//         String name = targetComponent.name;
//         if(name.startsWith("."))
//             name = packageName+name;
// 
//         this.setComponent(new ComponentName(packageName, name));
//     }
// 
//     //empty constructor
//     private MalIntent(){super();}
// 
//     public AndroidComponent getTargetComponent() {
//         return targetComponent;
//     }
// 
//     public void setTargetComponent(AndroidComponent targetComponent) {
//         this.targetComponent = targetComponent;
//     }
// 
//     public MalIntent clone(){
//         MalIntent cloned = new MalIntent();
//         cloned.setType(this.getType());
//         cloned.setComponent(this.getComponent());
//         if(this.getExtras()!=null)
//             cloned.putExtras(this.getExtras());
//         cloned.setTargetComponent(this.targetComponent);
//         cloned.setData(this.getData());
// 
//         return cloned;
//     }
// 
//     @Override
//     public boolean equals(Object object){
//         MalIntent mal1 = (MalIntent) object;
//         // filterEquals fa: Returns true if action, data, type, class, and categories are the same.
//         if(this.filterEquals(mal1)){
//             //dobbiamo fare il confronto per gli extra in qualche modo
//             Bundle b1 = mal1.getExtras();
//             Bundle b = this.getExtras();
//             if (b1 == null && b == null)
//                 return true;
//             else if (b1 == null ^ b == null) // xor: ^
//                 return false;
//             else {
//                 // dynamic binding (speriamo che va)
//                 return equalsObject(b.get(Intent.EXTRA_TEXT), b1.get(Intent.EXTRA_TEXT)) &&
//                         equalsObject(b.get(Intent.EXTRA_STREAM), b1.get(EXTRA_STREAM)) &&
//                         equalsObject(this.getData(), mal1.getData());
//             }
//         }
//         return false;
//     }
// 
//     private static boolean equalsObject(Object o, Object o1){
//         if ( o == null && o1 == null)
//             return true;
//         else if (o == null ^ o1 == null)
//             return false;
//         else return o.equals(o1);
//     }
// 
//     public String toString(){
//         return "MalIntent: \n\t Type: "+((getType()==null)? "null" : getType()) +
//                 "\t - Action:" + ((getAction() == null) ? "null" : getAction())+
//                 "\t - Extra Text: "+((getExtras()==null) || ((getExtras().get(Intent.EXTRA_TEXT) == null))? "null" : getExtras().get(Intent.EXTRA_TEXT)) +
//                 "\t - Extra Stream: "+((getExtras()==null) || ((getExtras().get(Intent.EXTRA_STREAM) == null))? "null" : getExtras().get(Intent.EXTRA_STREAM)) +
//                 "\t - Data: " + ((getData() == null ) ? "null" : getData().toString());
//     }
// 
// 
// 
// }


import android.content.Intent;
import android.net.Uri;
import com.jaredrummler.apkparser.model.AndroidComponent;
import org.apache.commons.lang3.RandomStringUtils;
import it.unisannio.security.DoApp.model.IntentDataInfo;
import it.unisannio.security.DoApp.model.MalIntent;
package it.unisannio.security.DoApp.generators.randomgenerator;





/**
 * Created by antonio on 12/01/17.
 */

public class RandomURIGenerator {

    public static MalIntent getRandomURIMalIntent(IntentDataInfo datafield){

// Path: app/src/main/java/it/unisannio/security/DoApp/model/IntentDataInfo.java
// public class IntentDataInfo extends IntentFilter.IntentData{
// 
//     private AndroidComponent component;
//     private String packageName;
//     private IntentFilter filter; //intent-filter in which is declared the <data> field
// 
//     public IntentDataInfo(IntentFilter.IntentData data, AndroidComponent component, String packageName, IntentFilter filter) {
//         super(data.scheme, data.host, data.port, data.path, data.pathPattern, data.pathPrefix, data.mimeType, data.type);
//         this.component = component;
//         this.packageName = packageName;
//         this.filter = filter;
//     }
// 
//     public AndroidComponent getComponent(){
//         return component;
//     }
// 
//     public void setComponent(AndroidComponent component){
//         this.component = component;
//     }
// 
//     public String getPackageName() {
//         return packageName;
//     }
// 
//     public void setPackageName(String packageName) {
//         this.packageName = packageName;
//     }
// 
//     public IntentFilter getFilter() {
//         return filter;
//     }
// 
//     public void setFilter(IntentFilter filter) {
//         this.filter = filter;
//     }
// }
// 
// Path: app/src/main/java/it/unisannio/security/DoApp/model/MalIntent.java
// public class MalIntent extends Intent{
// 
//     private AndroidComponent targetComponent;
// 
//     public MalIntent(IntentDataInfo datafield){
//         super();
//         this.targetComponent = datafield.getComponent();
//         String packageName = datafield.getPackageName();
// 
//         // se il nome inizia per '.' è necessario creare il nome completo del componente
//         // altrimenti si va in ActivityNotFoundException durante lo startActivity()
//         String name = targetComponent.name;
//         if(name.startsWith("."))
//             name = packageName+name;
// 
//         this.setComponent(new ComponentName(packageName, name));
//     }
// 
//     //empty constructor
//     private MalIntent(){super();}
// 
//     public AndroidComponent getTargetComponent() {
//         return targetComponent;
//     }
// 
//     public void setTargetComponent(AndroidComponent targetComponent) {
//         this.targetComponent = targetComponent;
//     }
// 
//     public MalIntent clone(){
//         MalIntent cloned = new MalIntent();
//         cloned.setType(this.getType());
//         cloned.setComponent(this.getComponent());
//         if(this.getExtras()!=null)
//             cloned.putExtras(this.getExtras());
//         cloned.setTargetComponent(this.targetComponent);
//         cloned.setData(this.getData());
// 
//         return cloned;
//     }
// 
//     @Override
//     public boolean equals(Object object){
//         MalIntent mal1 = (MalIntent) object;
//         // filterEquals fa: Returns true if action, data, type, class, and categories are the same.
//         if(this.filterEquals(mal1)){
//             //dobbiamo fare il confronto per gli extra in qualche modo
//             Bundle b1 = mal1.getExtras();
//             Bundle b = this.getExtras();
//             if (b1 == null && b == null)
//                 return true;
//             else if (b1 == null ^ b == null) // xor: ^
//                 return false;
//             else {
//                 // dynamic binding (speriamo che va)
//                 return equalsObject(b.get(Intent.EXTRA_TEXT), b1.get(Intent.EXTRA_TEXT)) &&
//                         equalsObject(b.get(Intent.EXTRA_STREAM), b1.get(EXTRA_STREAM)) &&
//                         equalsObject(this.getData(), mal1.getData());
//             }
//         }
//         return false;
//     }
// 
//     private static boolean equalsObject(Object o, Object o1){
//         if ( o == null && o1 == null)
//             return true;
//         else if (o == null ^ o1 == null)
//             return false;
//         else return o.equals(o1);
//     }
// 
//     public String toString(){
//         return "MalIntent: \n\t Type: "+((getType()==null)? "null" : getType()) +
//                 "\t - Action:" + ((getAction() == null) ? "null" : getAction())+
//                 "\t - Extra Text: "+((getExtras()==null) || ((getExtras().get(Intent.EXTRA_TEXT) == null))? "null" : getExtras().get(Intent.EXTRA_TEXT)) +
//                 "\t - Extra Stream: "+((getExtras()==null) || ((getExtras().get(Intent.EXTRA_STREAM) == null))? "null" : getExtras().get(Intent.EXTRA_STREAM)) +
//                 "\t - Data: " + ((getData() == null ) ? "null" : getData().toString());
//     }
// 
// 
// 
// }


// Path: app/src/main/java/it/unisannio/security/DoApp/generators/randomgenerator/RandomURIGenerator.java
import android.content.Intent;
import android.net.Uri;
import com.jaredrummler.apkparser.model.AndroidComponent;
import org.apache.commons.lang3.RandomStringUtils;
import it.unisannio.security.DoApp.model.IntentDataInfo;
import it.unisannio.security.DoApp.model.MalIntent;

package it.unisannio.security.DoApp.generators.randomgenerator;





/**
 * Created by antonio on 12/01/17.
 */

public class RandomURIGenerator {

    public static MalIntent getRandomURIMalIntent(IntentDataInfo datafield){

        MalIntent mal = new MalIntent(datafield);