Skip to content

Commit 0f3f2f1

Browse files
committed
fix parametrical scheduler for dashboard
1 parent 659d593 commit 0f3f2f1

3 files changed

Lines changed: 278 additions & 12 deletions

File tree

knowage-core/src/main/java/it/eng/spagobi/engines/drivers/dashboard/DashboardDriver.java

Lines changed: 266 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,34 @@
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
1818

19-
/**
20-
*
21-
*/
2219
package 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;
2840
import org.apache.log4j.Logger;
2941
import org.json.JSONException;
3042

3143
import com.jayway.jsonpath.Configuration;
3244
import com.jayway.jsonpath.JsonPath;
3345
import 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
}

knowage-core/src/main/java/it/eng/spagobi/engines/drivers/generic/GenericDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ private Map addBIParameters(BIObject biobj, Map pars) {
270270
* @param pars Map of the parameters for the execution call
271271
* @return Map The map of the execution call parameters
272272
*/
273-
private Map addOutputParameters(BIObject biobj, Map pars) {
273+
protected Map addOutputParameters(BIObject biobj, Map pars) {
274274
logger.debug("IN");
275275

276276
if (biobj == null) {

knowagecockpitengine/src/main/java/it/eng/knowage/engine/cockpit/api/page/PageResource.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -685,18 +685,26 @@ private String createJsonFromParemeters(BIObject biObject) throws JSONException
685685
List<String> descriptions = Optional.ofNullable(parameterMap.get(urlName + "_description"))
686686
.map(Arrays::asList).orElse(Collections.emptyList());
687687

688+
List<String> splitValues = new ArrayList<>();
689+
if (biObject.getEngine().getLabel().equals("knowagedashboardengine")) {
690+
List<String> finalSplitValues = splitValues;
691+
values.forEach(v -> {
692+
finalSplitValues.addAll(Arrays.asList(v.split(";")));
693+
});
694+
}
695+
688696
if (OUTPUT_TYPE.equals(urlName)) {
689697
LOGGER.debug("Forcing outputType to HTML");
690-
values = Arrays.asList("HTML");
698+
splitValues = Arrays.asList("HTML");
691699
descriptions = Arrays.asList("HTML");
692700
}
693701

694702
JSONObject currentDriverJson = new JSONObject();
695703

696704
JSONArray valuesAsJSONArray = new JSONArray();
697705

698-
for (int i = 0; i < Math.max(values.size(), descriptions.size()); i++) {
699-
Object value = Iterables.get(values, i, "");
706+
for (int i = 0; i < Math.max(splitValues.size(), descriptions.size()); i++) {
707+
Object value = Iterables.get(splitValues, i, "");
700708
Object description = Iterables.get(descriptions, i, "");
701709

702710
JSONObject currValue = new JSONObject();

0 commit comments

Comments
 (0)