Plugins kan legges til menyboksen ved å implemetere ett av interfacene i pakken
com.objectplanet.survey.plugin.interfaces.menu
En plugin kan ha flere funksjoner. Hver funkjson dukker opp som en lenke i menyboksen.
|
Antall funksjoner.
Antall funksjoner som tilbys av plugins er returnert av metoden getFunctionCount() i plugin-en. Hvis plugin-en har to funksjoner, returner tallet 2.
Funksjonsetikett.
Metoden getFunctionLabel(int functionNo, HashMap resources) bør returnere et beskrivende navn på funksjonen. Navnet dukker opp i menyboksen som en lenke.
public String getFunctionLabel(int functionNo, HashMap resources) {
switch (functionNo) {
case 1:
return "Recognize address";
case 2:
return "Recognize name";
}
return "Unsupported function";
}
Funksjonssikkerhet.
Plugin-en er ansvarlig for sikkerhetssjekk. Dette kan gjøres ved å implementere metoden hasFunctionAccess(long userId, int functionNo, HashMap resources)
Funksjons-HTML.
Mottar HTML-kode for plugin-funksjonen. Koden må inkludere all HTML som trengs mellom form-taggene. Her er et eksempel med to funksjoner:
public String getFunctionHTML(int functionNo, HashMap resources) {
StringBuffer pluginFunctionHTML = new StringBuffer();
switch (functionNo) {
case 1:
pluginFunctionHTML.append("<table>");
pluginFunctionHTML.append(" <tr><td class='form label'>Your mail address:</td>");
pluginFunctionHTML.append(" <td class='form value'>");
pluginFunctionHTML.append(" <INPUT TYPE='text' class=width200 name='plugin_email' value=''>");
pluginFunctionHTML.append(" </td>");
pluginFunctionHTML.append(" </tr>");
pluginFunctionHTML.append(" <tr><td></td><td class=buttons>");
pluginFunctionHTML.append(" <INPUT TYPE=submit class=button value='Ok'>");
pluginFunctionHTML.append(" </td>");
pluginFunctionHTML.append(" </tr>");
pluginFunctionHTML.append("</table>");
break;
case 2:
pluginFunctionHTML.append("<table>");
pluginFunctionHTML.append(" <tr><td class='form label'>Your name:</td>");
pluginFunctionHTML.append(" <td class='form value'>");
pluginFunctionHTML.append(" <INPUT TYPE='text' class=width200 name='plugin_name' value=''>");
pluginFunctionHTML.append(" </td>");
pluginFunctionHTML.append(" </tr>");
pluginFunctionHTML.append(" <tr><td></td><td class=buttons>");
pluginFunctionHTML.append(" <INPUT TYPE=submit class=button value='Ok'>");
pluginFunctionHTML.append(" </td>");
pluginFunctionHTML.append(" </tr>");
pluginFunctionHTML.append("</table>");
break;
}
return pluginFunctionHTML.toString();
Når brukeren taster inn verdiene og klikker på send-knappen vil Opinio motta formularet og returnere det gjennom et kall til metoden processFunctionHTML(int functionNo, HashMap resources). Det er så opp til plugin-en å prosessere HTML-koden. Det er anbefalt at Opinios utseende og stil brukes.
Prosessere funksjons-HTML.
Metoden processFunctionHTML(int functionNo, HashMap resources) kalles av Opinio når en bruker sender over funksjonssiden. Eksempel på implementering av metoden:
public ProcessResult processFunctionHTML(int functionNo, HashMap resources) {
// retrieve request object
HttpServletRequest request = (HttpServletRequest) resources.get("HttpRequest");
// process the html based on function number
switch (functionNo) {
case 1:
String email = request.getParameter("plugin_email");
if (email == null || email.equals("")) {
return new ProcessResult("Email cannot be blank!", true);
}
return new ProcessResult("Entered email is " + email, false);
case 2:
String name = request.getParameter("plugin_name");
if (name == null || name.equals("")) {
return new ProcessResult("Name cannot be blank!", true);
}
return new ProcessResult("Entered name is " + name, false);
}
return super.processFunctionHTML(functionNo, resources);
}
Metoden returnerer resultatobjektet med en beskjed som vises til brukeren. La brukeren få vite hva som skjedde med prosesseringen av verdiene fra formularet. Hvis null er returnert, vil pluginlisten vises. Hvis et resultat av type "confirmation" er returnert, vil en bekreftelsesbeskjed vises, basert på brukerpreferansene. Hvis et resultat av type "error" er returnert, vil feilmeldingen bli vist på oppsettsskjermen. Legg merke til at hvis ProcessResult av type error returneres, vil getSetupHTML(HashMap) bli kalt igjen. Implementer logikken som tar imot verdiene fra forespørselen og legg verdiene i feltene i formularet slik at brukeren kan korrigere dem.
Plugin-kildekode. Kildekoden til dette eksempelet finnes i distribusjonen: SurveyFunctionExamplePlugin