In un precedente articolo ho spiegato come Implementare un comando personalizzato per la Gogo shell di Liferay 7; in questo nuovo articolo vi spiegherò qualche altra utile informazione per perfezionare il vostro comando personalizzato.

Partiamo quindi dal medesimo progetto visto nell'altro articolo ma assicuriamoci di avere le seguenti dipendenze all'interno del file build.gradle:

dependencies {
    compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "2.0.0"
    compileOnly group: "javax.portlet", name: "portlet-api", version: "2.0"
    compileOnly group: "org.apache.felix", name: "org.apache.felix.gogo.runtime", version: "1.0.6"
    compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0"
}

E le seguenti importazioni nel file bnd.bnd:

[...]
Import-Package: \
org.apache.felix.service.command;status=provisional;version='[0.10,1)',\
*

A questo punto abbiamo visto come dichiarare il comando personalizzato attraverso le annotation:

package it.marconapolitano.liferay.gogo.command;

@Component(property = {
    "osgi.command.function=company", "osgi.command.scope=liferay"
}, service = Object.class)
public class CompanyCommand {
}

La prima cosa da segnalare è come sia possibile specificare più di un comando, semplicemente ripetendo la property osgi.command.function ed implementando i relativi metodi Java come già abbiamo visto:

package it.marconapolitano.liferay.gogo.command;

@Component(property = {
    "osgi.command.function=company", "osgi.command.function=company2",
    "osgi.command.scope=liferay"
}, service = Object.class)
public class CompanyCommand {
public void company() {
// ...
}

public void company(long companyId) {
// ...
}

public void company2() {
// ...
}
}

Se ci colleghiamo alla Gogo shell e digitiamo il comando help company otterremo qualcosa di non troppo parlante come questo:

company
   scope: liferay
parameters:
long

company
scope: liferay

Per descrivere meglio i nostri metodi ed i loro parametri è sufficiente utilizzare l'annotarion Descriptor come di seguito illustrato:

package it.marconapolitano.liferay.gogo.command;

@Component(property = {
    "osgi.command.function=company", "osgi.command.function=company2",
    "osgi.command.scope=liferay"
}, service = Object.class)
public class CompanyCommand {

@Descriptor("Visualizza l'elenco delle istanze")
public void company() {
// ...
}

@Descriptor("Visualizza il dettaglio di un'istanza")
public void company(
@Descriptor("Identificativo dell'istanza") long companyId) {
// ...
}
}

Se adesso ci colleghiamo alla Gogo shell e digitiamo il comando help company otterremo qualcosa di molto più parlante come questo:

company - Visualizza il dettaglio di un'istanza
   scope: liferay
parameters:
long Identificativo dell'istanza

company - Visualizza l'elenco delle istanze
scope: liferay