You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@karaf.apache.org by Damien Saulnier <ds...@jahia.com.INVALID> on 2021/09/16 09:39:00 UTC

Interactive commands in the Karaf shell

Hi,

I would like to know if it is possible to develop some interactive commands
in the Karaf Shell, pausing the execution of the command and reading some
additional input from the user.
I have not found anything about that neither in the documentation nor in
the examples on Github.

To give a basic use case, I would like to ask for a confirmation before
proceeding with the actual removal in the "RemoveCommand" example:
https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java


Best,
Damien

Re: Interactive commands in the Karaf shell

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
No, the getKeyboard() gives you the InputStream, so, you read from there 
directly in the command.

Regards
JB

On 17/09/2021 14:14, Patrique Legault wrote:
> Interesting but I'm assuming you need to handle it in a thread or something
> like that?
> 
> When I called it in the command the execution would just pause.
> 
> On Fri., Sep. 17, 2021, 3:26 a.m. Jean-Baptiste Onofré, <jb...@nanthrax.net>
> wrote:
> 
>> Hi Damien,
>>
>> mask defines if you want the output or not, and the kind of output (*, '
>> ', etc).
>>
>> readLine() is fine if you just want a single line typed by the users.
>> getKeyboard() gives your the full keyboard input (multiline, including
>> breaking characters), it's what I'm using in the vi/edit command.
>>
>> Regards
>> JB
>>
>> On 17/09/2021 09:00, Damien Saulnier wrote:
>>> Hi Patrique,
>>>
>>> I have been able to achieve it using session.readLine() :
>>> final String userInput = session.readLine("Do you want to proceed with
>> the
>>> deletion? (y/n)\n", null);
>>> if (!StringUtils.equalsIgnoreCase(userInput, "y")) return;
>>>
>>> I don't know what the "mask" parameter is for, but just setting it to
>> null
>>> did the job.
>>>
>>> I assume that session.getKeyboard() is useful when you want to listen the
>>> keyboard while the command is running, whereas with readLine() it pauses
>>> the execution and waits for the input.
>>>
>>>
>>> Best,
>>> Damien
>>>
>>>
>>> Le jeu. 16 sept. 2021 à 22:57, Patrique Legault <
>> patriquelegault@gmail.com>
>>> a écrit :
>>>
>>>> I tried to get an example going today of this but failed to properly use
>>>> the getKeyboard() function.
>>>>
>>>> With that being said I would like to an example of this.
>>>>
>>>> On Thu., Sep. 16, 2021, 7:26 a.m. Jean-Baptiste Onofré, <
>> jb@nanthrax.net>
>>>> wrote:
>>>>
>>>>> Hi Damien,
>>>>>
>>>>> Yes, sure.
>>>>>
>>>>> You can get the session by reference (for instance @Reference Session).
>>>>>
>>>>> Then session gives you access to getKeyboard() which is a input stream
>>>>> with what the user input.
>>>>>
>>>>> I can improve the example with the required code if you want.
>>>>>
>>>>> Regards
>>>>> JB
>>>>>
>>>>> On 16/09/2021 11:39, Damien Saulnier wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I would like to know if it is possible to develop some interactive
>>>>> commands
>>>>>> in the Karaf Shell, pausing the execution of the command and reading
>>>> some
>>>>>> additional input from the user.
>>>>>> I have not found anything about that neither in the documentation nor
>>>> in
>>>>>> the examples on Github.
>>>>>>
>>>>>> To give a basic use case, I would like to ask for a confirmation
>> before
>>>>>> proceeding with the actual removal in the "RemoveCommand" example:
>>>>>>
>>>>>
>>>>
>> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java
>>>>>>
>>>>>>
>>>>>> Best,
>>>>>> Damien
>>>>>>
>>>>>
>>>>
>>>
>>
> 

Re: Interactive commands in the Karaf shell

Posted by Patrique Legault <pa...@gmail.com>.
Interesting but I'm assuming you need to handle it in a thread or something
like that?

When I called it in the command the execution would just pause.

On Fri., Sep. 17, 2021, 3:26 a.m. Jean-Baptiste Onofré, <jb...@nanthrax.net>
wrote:

> Hi Damien,
>
> mask defines if you want the output or not, and the kind of output (*, '
> ', etc).
>
> readLine() is fine if you just want a single line typed by the users.
> getKeyboard() gives your the full keyboard input (multiline, including
> breaking characters), it's what I'm using in the vi/edit command.
>
> Regards
> JB
>
> On 17/09/2021 09:00, Damien Saulnier wrote:
> > Hi Patrique,
> >
> > I have been able to achieve it using session.readLine() :
> > final String userInput = session.readLine("Do you want to proceed with
> the
> > deletion? (y/n)\n", null);
> > if (!StringUtils.equalsIgnoreCase(userInput, "y")) return;
> >
> > I don't know what the "mask" parameter is for, but just setting it to
> null
> > did the job.
> >
> > I assume that session.getKeyboard() is useful when you want to listen the
> > keyboard while the command is running, whereas with readLine() it pauses
> > the execution and waits for the input.
> >
> >
> > Best,
> > Damien
> >
> >
> > Le jeu. 16 sept. 2021 à 22:57, Patrique Legault <
> patriquelegault@gmail.com>
> > a écrit :
> >
> >> I tried to get an example going today of this but failed to properly use
> >> the getKeyboard() function.
> >>
> >> With that being said I would like to an example of this.
> >>
> >> On Thu., Sep. 16, 2021, 7:26 a.m. Jean-Baptiste Onofré, <
> jb@nanthrax.net>
> >> wrote:
> >>
> >>> Hi Damien,
> >>>
> >>> Yes, sure.
> >>>
> >>> You can get the session by reference (for instance @Reference Session).
> >>>
> >>> Then session gives you access to getKeyboard() which is a input stream
> >>> with what the user input.
> >>>
> >>> I can improve the example with the required code if you want.
> >>>
> >>> Regards
> >>> JB
> >>>
> >>> On 16/09/2021 11:39, Damien Saulnier wrote:
> >>>> Hi,
> >>>>
> >>>> I would like to know if it is possible to develop some interactive
> >>> commands
> >>>> in the Karaf Shell, pausing the execution of the command and reading
> >> some
> >>>> additional input from the user.
> >>>> I have not found anything about that neither in the documentation nor
> >> in
> >>>> the examples on Github.
> >>>>
> >>>> To give a basic use case, I would like to ask for a confirmation
> before
> >>>> proceeding with the actual removal in the "RemoveCommand" example:
> >>>>
> >>>
> >>
> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java
> >>>>
> >>>>
> >>>> Best,
> >>>> Damien
> >>>>
> >>>
> >>
> >
>

Re: Interactive commands in the Karaf shell

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi Damien,

mask defines if you want the output or not, and the kind of output (*, ' 
', etc).

readLine() is fine if you just want a single line typed by the users.
getKeyboard() gives your the full keyboard input (multiline, including 
breaking characters), it's what I'm using in the vi/edit command.

Regards
JB

On 17/09/2021 09:00, Damien Saulnier wrote:
> Hi Patrique,
> 
> I have been able to achieve it using session.readLine() :
> final String userInput = session.readLine("Do you want to proceed with the
> deletion? (y/n)\n", null);
> if (!StringUtils.equalsIgnoreCase(userInput, "y")) return;
> 
> I don't know what the "mask" parameter is for, but just setting it to null
> did the job.
> 
> I assume that session.getKeyboard() is useful when you want to listen the
> keyboard while the command is running, whereas with readLine() it pauses
> the execution and waits for the input.
> 
> 
> Best,
> Damien
> 
> 
> Le jeu. 16 sept. 2021 à 22:57, Patrique Legault <pa...@gmail.com>
> a écrit :
> 
>> I tried to get an example going today of this but failed to properly use
>> the getKeyboard() function.
>>
>> With that being said I would like to an example of this.
>>
>> On Thu., Sep. 16, 2021, 7:26 a.m. Jean-Baptiste Onofré, <jb...@nanthrax.net>
>> wrote:
>>
>>> Hi Damien,
>>>
>>> Yes, sure.
>>>
>>> You can get the session by reference (for instance @Reference Session).
>>>
>>> Then session gives you access to getKeyboard() which is a input stream
>>> with what the user input.
>>>
>>> I can improve the example with the required code if you want.
>>>
>>> Regards
>>> JB
>>>
>>> On 16/09/2021 11:39, Damien Saulnier wrote:
>>>> Hi,
>>>>
>>>> I would like to know if it is possible to develop some interactive
>>> commands
>>>> in the Karaf Shell, pausing the execution of the command and reading
>> some
>>>> additional input from the user.
>>>> I have not found anything about that neither in the documentation nor
>> in
>>>> the examples on Github.
>>>>
>>>> To give a basic use case, I would like to ask for a confirmation before
>>>> proceeding with the actual removal in the "RemoveCommand" example:
>>>>
>>>
>> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java
>>>>
>>>>
>>>> Best,
>>>> Damien
>>>>
>>>
>>
> 

Re: Interactive commands in the Karaf shell

Posted by Damien Saulnier <ds...@jahia.com.INVALID>.
Hi Patrique,

I have been able to achieve it using session.readLine() :
final String userInput = session.readLine("Do you want to proceed with the
deletion? (y/n)\n", null);
if (!StringUtils.equalsIgnoreCase(userInput, "y")) return;

I don't know what the "mask" parameter is for, but just setting it to null
did the job.

I assume that session.getKeyboard() is useful when you want to listen the
keyboard while the command is running, whereas with readLine() it pauses
the execution and waits for the input.


Best,
Damien


Le jeu. 16 sept. 2021 à 22:57, Patrique Legault <pa...@gmail.com>
a écrit :

> I tried to get an example going today of this but failed to properly use
> the getKeyboard() function.
>
> With that being said I would like to an example of this.
>
> On Thu., Sep. 16, 2021, 7:26 a.m. Jean-Baptiste Onofré, <jb...@nanthrax.net>
> wrote:
>
> > Hi Damien,
> >
> > Yes, sure.
> >
> > You can get the session by reference (for instance @Reference Session).
> >
> > Then session gives you access to getKeyboard() which is a input stream
> > with what the user input.
> >
> > I can improve the example with the required code if you want.
> >
> > Regards
> > JB
> >
> > On 16/09/2021 11:39, Damien Saulnier wrote:
> > > Hi,
> > >
> > > I would like to know if it is possible to develop some interactive
> > commands
> > > in the Karaf Shell, pausing the execution of the command and reading
> some
> > > additional input from the user.
> > > I have not found anything about that neither in the documentation nor
> in
> > > the examples on Github.
> > >
> > > To give a basic use case, I would like to ask for a confirmation before
> > > proceeding with the actual removal in the "RemoveCommand" example:
> > >
> >
> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java
> > >
> > >
> > > Best,
> > > Damien
> > >
> >
>

Re: Interactive commands in the Karaf shell

Posted by Patrique Legault <pa...@gmail.com>.
I tried to get an example going today of this but failed to properly use
the getKeyboard() function.

With that being said I would like to an example of this.

On Thu., Sep. 16, 2021, 7:26 a.m. Jean-Baptiste Onofré, <jb...@nanthrax.net>
wrote:

> Hi Damien,
>
> Yes, sure.
>
> You can get the session by reference (for instance @Reference Session).
>
> Then session gives you access to getKeyboard() which is a input stream
> with what the user input.
>
> I can improve the example with the required code if you want.
>
> Regards
> JB
>
> On 16/09/2021 11:39, Damien Saulnier wrote:
> > Hi,
> >
> > I would like to know if it is possible to develop some interactive
> commands
> > in the Karaf Shell, pausing the execution of the command and reading some
> > additional input from the user.
> > I have not found anything about that neither in the documentation nor in
> > the examples on Github.
> >
> > To give a basic use case, I would like to ask for a confirmation before
> > proceeding with the actual removal in the "RemoveCommand" example:
> >
> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java
> >
> >
> > Best,
> > Damien
> >
>

Re: Interactive commands in the Karaf shell

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi Damien,

Yes, sure.

You can get the session by reference (for instance @Reference Session).

Then session gives you access to getKeyboard() which is a input stream 
with what the user input.

I can improve the example with the required code if you want.

Regards
JB

On 16/09/2021 11:39, Damien Saulnier wrote:
> Hi,
> 
> I would like to know if it is possible to develop some interactive commands
> in the Karaf Shell, pausing the execution of the command and reading some
> additional input from the user.
> I have not found anything about that neither in the documentation nor in
> the examples on Github.
> 
> To give a basic use case, I would like to ask for a confirmation before
> proceeding with the actual removal in the "RemoveCommand" example:
> https://github.com/apache/karaf/blob/main/examples/karaf-command-example/karaf-command-example-command/src/main/java/org/apache/karaf/examples/command/command/RemoveCommand.java
> 
> 
> Best,
> Damien
>