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