1616 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1717 */
1818
19- /**
20- *
21- */
2219package it .eng .spagobi .engines .drivers .dashboard ;
2320
24- import java .util .ArrayList ;
25- import java .util .List ;
26- import java .util .Objects ;
21+ import java .util .*;
2722
23+ import it .eng .spago .base .SourceBean ;
24+ import it .eng .spago .configuration .ConfigSingleton ;
25+ import it .eng .spago .error .EMFUserError ;
26+ import it .eng .spago .security .IEngUserProfile ;
27+ import it .eng .spagobi .analiticalmodel .document .bo .BIObject ;
28+ import it .eng .spagobi .analiticalmodel .document .bo .ObjTemplate ;
29+ import it .eng .spagobi .behaviouralmodel .analyticaldriver .bo .BIObjectParameter ;
30+ import it .eng .spagobi .behaviouralmodel .analyticaldriver .bo .Parameter ;
31+ import it .eng .spagobi .behaviouralmodel .lov .bo .ModalitiesValue ;
32+ import it .eng .spagobi .commons .constants .SpagoBIConstants ;
33+ import it .eng .spagobi .commons .dao .DAOFactory ;
34+ import it .eng .spagobi .commons .utilities .PortletUtilities ;
35+ import it .eng .spagobi .commons .utilities .UserUtilities ;
36+ import it .eng .spagobi .commons .utilities .messages .MessageBuilder ;
37+ import it .eng .spagobi .engines .drivers .cockpit .CockpitDriver ;
38+ import it .eng .spagobi .engines .drivers .generic .GenericDriver ;
39+ import it .eng .spagobi .utilities .exceptions .SpagoBIRuntimeException ;
2840import org .apache .log4j .Logger ;
2941import org .json .JSONException ;
3042
3143import com .jayway .jsonpath .Configuration ;
3244import com .jayway .jsonpath .JsonPath ;
3345import com .jayway .jsonpath .Option ;
3446
35- import it .eng .spagobi .engines .drivers .cockpit .CockpitDriver ;
36-
3747/**
3848 * @author albnale
3949 *
@@ -43,6 +53,9 @@ public class DashboardDriver extends CockpitDriver {
4353
4454 private static Logger logger = Logger .getLogger (DashboardDriver .class );
4555
56+ private static final String PARAM_NEW_SESSION = "NEW_SESSION" ;
57+
58+
4659 @ Override
4760 public ArrayList <String > getFunctionsAssociated (byte [] contentTemplate ) throws JSONException {
4861 logger .debug ("IN" );
@@ -61,4 +74,249 @@ public ArrayList<String> getFunctionsAssociated(byte[] contentTemplate) throws J
6174 return functionUuids ;
6275 }
6376
77+ /**
78+ * Returns a map of parameters which will be send in the request to the engine application.
79+ *
80+ * @param profile Profile of the user
81+ * @param roleName the name of the execution role
82+ * @param biobject the biobject
83+ */
84+ @ Override
85+ public Map getParameterMap (Object biobject , IEngUserProfile profile , String roleName ) {
86+ logger .debug ("IN" );
87+ Map map ;
88+ try {
89+ BIObject biobj = (BIObject ) biobject ;
90+ map = getMap (biobj , profile );
91+ map .put (PARAM_NEW_SESSION , "TRUE" );
92+ map = applySecurity (map , profile );
93+ map = applyLocale (map );
94+ } catch (Exception e ) {
95+ throw new SpagoBIRuntimeException (e );
96+ }
97+
98+ logger .debug ("OUT" );
99+ return map ;
100+ }
101+
102+
103+
104+ /**
105+ * Starting from a BIObject extracts from it the map of the paramaeters for the execution call
106+ *
107+ * @param biobj BIObject to execute
108+ * @return Map The map of the execution call parameters
109+ */
110+ private Map getMap (BIObject biobj , IEngUserProfile profile ) {
111+ logger .debug ("IN" );
112+
113+ Map pars ;
114+ ObjTemplate objtemplate ;
115+ byte [] template ;
116+ String documentId ;
117+ String documentlabel ;
118+
119+ pars = new Hashtable ();
120+ try {
121+
122+ if (biobj .getDocVersion () != null ) {
123+ objtemplate = DAOFactory .getObjTemplateDAO ().loadBIObjectTemplate (biobj .getDocVersion ()); // specific template version (not active version)
124+ logger .info ("Used template version id " + biobj .getDocVersion ());
125+ } else {
126+ objtemplate = DAOFactory .getObjTemplateDAO ().getBIObjectActiveTemplate (biobj .getId ()); // default
127+ logger .info ("Used active template (default) " );
128+ }
129+
130+ if (objtemplate == null ) {
131+ throw new SpagoBIRuntimeException ("Template is [null] in document with id equals to [" + biobj .getId () + "]" );
132+ }
133+
134+ template = DAOFactory .getBinContentDAO ().getBinContent (objtemplate .getBinId ());
135+ if (template == null ) {
136+ throw new SpagoBIRuntimeException ("Content of the active template is [null] in document with id equals to [" + biobj .getId () + "]" );
137+ }
138+
139+ documentId = biobj .getId ().toString ();
140+ pars .put (DOCUMENT_ID , documentId );
141+ logger .debug ("Add " + DOCUMENT_ID + " parameter:" + documentId );
142+
143+ documentlabel = biobj .getLabel ().toString ();
144+ pars .put (DOCUMENT_LABEL , documentlabel );
145+ logger .debug ("Add " + DOCUMENT_LABEL + " parameter: " + documentlabel );
146+ pars .put (DOCUMENT_VERSION , objtemplate .getId ());
147+ logger .debug ("Add " + DOCUMENT_VERSION + " parameter: " + objtemplate .getId ());
148+ pars .put (DOCUMENT_AUTHOR , biobj .getCreationUser ());
149+ logger .debug ("Add " + DOCUMENT_AUTHOR + " parameter: " + biobj .getCreationUser ());
150+ pars .put (DOCUMENT_NAME , biobj .getName ());
151+ logger .debug ("Add " + DOCUMENT_NAME + " parameter: " + biobj .getName ());
152+ pars .put (DOCUMENT_DESCRIPTION , biobj .getDescription ());
153+ logger .debug ("Add " + DOCUMENT_DESCRIPTION + " parameter: " + biobj .getDescription ());
154+ pars .put (DOCUMENT_IS_PUBLIC , biobj .isPublicDoc ());
155+ logger .debug ("Add " + DOCUMENT_IS_PUBLIC + " parameter: " + biobj .isPublicDoc ());
156+ pars .put (DOCUMENT_IS_VISIBLE , biobj .isVisible ());
157+ logger .debug ("Add " + DOCUMENT_IS_VISIBLE + " parameter: " + biobj .isVisible ());
158+ if (biobj .getPreviewFile () != null ) {
159+ pars .put (DOCUMENT_PREVIEW_FILE , biobj .getPreviewFile ());
160+ }
161+ logger .debug ("Add " + DOCUMENT_PREVIEW_FILE + " parameter: " + biobj .getPreviewFile ());
162+ List funcs = biobj .getFunctionalities ();
163+ if (funcs != null ) {
164+ pars .put (DOCUMENT_FUNCTIONALITIES , funcs );
165+ logger .debug ("Add " + DOCUMENT_FUNCTIONALITIES + " parameter: " + funcs );
166+ }
167+ pars .put (IS_TECHNICAL_USER , UserUtilities .isTechnicalUser (profile ));
168+ logger .debug ("Add " + IS_TECHNICAL_USER + " parameter: " + UserUtilities .isTechnicalUser (profile ));
169+
170+ pars = addBIParameters (biobj , pars );
171+ pars = addBIParameterDescriptions (biobj , pars );
172+ pars = addOutputParameters (biobj , pars );
173+
174+ } catch (Exception e ) {
175+ throw new SpagoBIRuntimeException ("Error while recovering execution parameter map: \n " + e );
176+ }
177+
178+ logger .debug ("OUT" );
179+
180+ return pars ;
181+ }
182+
183+
184+ /**
185+ * Add into the parameters map the BIObject's BIParameter names and values
186+ *
187+ * @param biobj BIOBject to execute
188+ * @param pars Map of the parameters for the execution call
189+ * @return Map The map of the execution call parameters
190+ */
191+ private Map addBIParameters (BIObject biobj , Map pars ) {
192+ logger .debug ("IN" );
193+
194+ if (biobj == null ) {
195+ logger .warn ("BIObject parameter null" );
196+ return pars ;
197+ }
198+
199+ if (biobj .getDrivers () != null ) {
200+ BIObjectParameter biobjPar = null ;
201+ for (Iterator <BIObjectParameter > it = biobj .getDrivers ().iterator (); it .hasNext ();) {
202+ try {
203+ biobjPar = it .next ();
204+ String value = encode (biobjPar );
205+ if (biobjPar .getParameterUrlName () != null && value != null ) {
206+ pars .put (biobjPar .getParameterUrlName (), value );
207+ logger .debug ("Add parameter:" + biobjPar .getParameterUrlName () + "/" + value );
208+ } else {
209+ logger .warn ("NO parameter are added... something is null" );
210+ }
211+ } catch (Exception e ) {
212+ logger .error ("Error while processing a BIParameter" , e );
213+ }
214+ }
215+ }
216+
217+ logger .debug ("OUT" );
218+ return pars ;
219+ }
220+
221+ public String encode (BIObjectParameter biobjPar ) {
222+ logger .debug ("IN" );
223+
224+ List <String > parameterValues = biobjPar .getParameterValues ();
225+ if (parameterValues == null ) {
226+ logger .debug ("biobjPar.getParameterValues() == null" );
227+ return null ;
228+ }
229+
230+ if (parameterValues .isEmpty ()) {
231+ return "" ;
232+ }
233+
234+ Parameter parameter = biobjPar .getParameter ();
235+ if (parameter == null ) {
236+ Integer parId = biobjPar .getParID ();
237+ if (parId == null ) {
238+ logger .warn (
239+ "Parameter object nor parameter id are set into BIObjectParameter with label = " + biobjPar .getLabel () + " of document with id = " +
240+ biobjPar .getBiObjectID ());
241+ } else {
242+ try {
243+ parameter = DAOFactory .getParameterDAO ().loadForDetailByParameterID (parId );
244+ } catch (EMFUserError e ) {
245+ logger .warn ("Error loading parameter with id = " + parId );
246+ }
247+ }
248+ }
249+
250+ if (parameter == null ) {
251+ logger .error ("Unable to load parameter from BIObjectParameter with label = " + biobjPar .getLabel () + " of document with id = " + biobjPar .getBiObjectID ());
252+ return null ;
253+ }
254+
255+ String type = parameter .getType ();
256+ boolean multivalue = biobjPar .isMultivalue ();
257+
258+ ModalitiesValue modValue = parameter .getModalityValue ();
259+ if (modValue != null ) {
260+ String typeCode = modValue .getITypeCd ();
261+ logger .debug ("typeCode " + typeCode );
262+
263+ if (SpagoBIConstants .INPUT_TYPE_MAN_IN_CODE .equalsIgnoreCase (typeCode )) {
264+ multivalue = false ;
265+ }
266+ }
267+
268+ return encodeValuesFromListOfStrings (multivalue , parameterValues , type );
269+ }
270+
271+
272+ public String encodeValuesFromListOfStrings (boolean multivalue , List <String > parameterValues , String type ) {
273+ if (!multivalue ) {
274+ return parameterValues .get (0 );
275+ } else {
276+ StringBuilder valuesToReturn = new StringBuilder ();
277+ for (String value : parameterValues ) {
278+ valuesToReturn .append (value ).append (";" );
279+ }
280+ return valuesToReturn .substring (0 , valuesToReturn .length () - 1 );
281+ }
282+ }
283+
284+
285+ private Map applyLocale (Map map ) {
286+ logger .debug ("IN" );
287+
288+ ConfigSingleton config = ConfigSingleton .getInstance ();
289+ Locale portalLocale ;
290+ try {
291+ portalLocale = PortletUtilities .getPortalLocale ();
292+ logger .debug ("Portal locale: " + portalLocale );
293+ } catch (Exception e ) {
294+ logger .warn ("Error while getting portal locale." );
295+ portalLocale = MessageBuilder .getBrowserLocaleFromSpago ();
296+ logger .debug ("Spago locale: " + portalLocale );
297+ }
298+
299+ SourceBean languageSB = null ;
300+ if (portalLocale != null ) {
301+ languageSB = (SourceBean ) config .getFilteredSourceBeanAttribute ("SPAGOBI.LANGUAGE_SUPPORTED.LANGUAGE" , "language" , portalLocale .getLanguage ());
302+ }
303+
304+ if (languageSB != null ) {
305+ map .put (COUNTRY , languageSB .getAttribute ("country" ));
306+ map .put (LANGUAGE , languageSB .getAttribute ("language" ));
307+ logger .debug ("Added parameter: country/" + (String ) languageSB .getAttribute ("country" ));
308+ logger .debug ("Added parameter: language/" + (String ) languageSB .getAttribute ("language" ));
309+ } else {
310+ logger .warn ("Language " + portalLocale .getLanguage () + " is not supported by SpagoBI" );
311+ logger .warn ("Portal locale will be replaced with the default lacale (country: US; language: en)." );
312+ map .put (COUNTRY , "US" );
313+ map .put (LANGUAGE , "en" );
314+ logger .debug ("Added parameter: country/US" );
315+ logger .debug ("Added parameter: language/en" );
316+ }
317+
318+ logger .debug ("OUT" );
319+ return map ;
320+ }
321+
64322}
0 commit comments