2017-03-08 1 views
2

Aujourd'hui, je veux créer une action d'installation personnalisée qui contient une instance de ma classe personnalisée en tant que propriété. La classe personnalisée est instanciée par l'action Set Varaible de install4j et est donc également définie sur le contexte d'installation. Maintenant, je veux passer cette instance à une action personnalisée. Par conséquent, j'ai implémenté l'action avec les méthodes getter() et setter() et j'ai créé la classe ActionBeanInfo correspondante. Si je place l'action dans l'EDI dans ma configuration de projet, je ne peux pas définir de valeur dans le champ de configuration de la classe personnalisée. Peut-être que je dois implémenter une sorte de classe PropertyConverter pour ma classe personnalisée? J'ai regardé l'exemple de code mais je n'ai trouvé aucune solution. Alors, comment je peux obtenir ce travail?Comment définir une propriété de classe personnalisée dans une action personnalisée?

AbstractInstallAction mise en œuvre:

public class MyCustomAction extends AbstractInstallAction { 

    private MyCustomClass instance; 

    @Override 
    public boolean install(InstallerContext installerContext) throws UserCanceledException { 
    ... 
    // do some stuff with the MyCustomClass instance 
    ... 
    } 

    public MyCustomClass getMyCustomClass() { 
    return instance; 
    } 

    public void setMyCustomClass(MyCustomClass instance) { 
    this.instance= instance; 
    } 
} 

ActionBeanInfo mise en œuvre:

public class MyCustomActionBeanInfo extends ActionBeanInfo { 

    private static final String PROPERTY_CUSTOM_CLASS = "myCustomClass"; 

    public MyCustomActionBeanInfo() { 
    super("Custom Action.", "This action will do some custom stuff.", null, 
      true, false, null, MyCustomAction.class); 

    addPropertyDescriptor(create(PROPERTY_CUSTOM_CLASS, getBeanClass(), "Custom class", 
      "Sets the custom class to do some custom stuff during installation.")); 
    } 
} 

Répondre

0

Vous devez écrire un convertisseur de propriété qui peut convertir une instance de MyCustomCass à une chaîne et éventuellement une chaîne une instance MyCustomClass.

L'interface que vous devez implémenter est com.install4j.api.beaninfo.PropertyConverter. Une fois que vous avez mis en place un convertisseur de propriété, vous vous inscrivez dans le constructeur de votre classe BeanInfo comme ceci:

setPropertyConverters(new PropertyConverter[] {propertyConverters}); 
+0

Est-il recommandé de mettre en œuvre le PropertyConverter directement dans le ActionBean pour obtenir le contexte d'installation et de lire l'objet de la variable liste? – Hardie82

+0

L'information sur le bean fonctionne uniquement au moment de la conception, il n'y a pas de contexte d'installation à ce stade. L'implémentation de PropertyConverted sur le bean action n'est pas possible car vous n'avez pas l'instance du bean dans le constructeur de l'information du bean. –

+0

Bon, je vais essayer ça aujourd'hui. Pour ma classe personnalisée, elle doit être sérialisable pour la mettre dans les variables de contexte du programme d'installation? – Hardie82