Skip to content

Commit 81a0635

Browse files
committed
[KNOWAGE-9356] dashboard/cockpit decoupling
1 parent 38c8e7f commit 81a0635

7 files changed

Lines changed: 355 additions & 191 deletions

File tree

knowage-core/src/main/java/it/eng/knowage/dashboardexport/DashboardExportResource.java

Lines changed: 315 additions & 16 deletions
Large diffs are not rendered by default.

knowage-core/src/main/java/it/eng/spagobi/commons/utilities/ExecutionProxy.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,12 @@ public byte[] exec(IEngUserProfile profile, String modality, String defaultOutpu
216216
// String userId = (String) UserProfile.createSchedulerUserProfileWithRole(null).getUserUniqueIdentifier();
217217
UserProfile userProfile = (UserProfile) profile;
218218
String encodedUserId = Base64.getEncoder().encodeToString(((String) userProfile.getUserId()).getBytes(UTF_8));
219-
httpMethod.addRequestHeader("Authorization", "Direct " + encodedUserId);
219+
220+
if (driverClassName.equals("it.eng.spagobi.engines.drivers.dashboard.DashboardDriver")) {
221+
httpMethod.addRequestHeader("X-Kn-Authorization", "Bearer " + encodedUserId);
222+
} else {
223+
httpMethod.addRequestHeader("Authorization", "Direct " + encodedUserId);
224+
}
220225

221226
// sent request to the engine
222227
LOGGER.debug("Calling {} with parameters {} and headers {}", httpMethod.getURI(), httpMethod.getParams(), httpMethod.getRequestHeaders());

knowagecockpitengine/src/main/java/it/eng/knowage/engine/cockpit/api/export/pdf/nodejs/AbstractNodeJSBasedExporter.java renamed to knowage-export/src/main/java/it/eng/knowage/engine/api/export/nodejs/AbstractNodeJSBasedExporter.java

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,7 @@
1515
* You should have received a copy of the GNU Affero General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package it.eng.knowage.engine.cockpit.api.export.pdf.nodejs;
19-
20-
import static java.nio.charset.StandardCharsets.UTF_8;
21-
22-
import java.io.BufferedReader;
23-
import java.io.File;
24-
import java.io.IOException;
25-
import java.io.InputStream;
26-
import java.io.InputStreamReader;
27-
import java.net.URI;
28-
import java.nio.file.FileSystems;
29-
import java.nio.file.FileVisitResult;
30-
import java.nio.file.Files;
31-
import java.nio.file.Path;
32-
import java.nio.file.PathMatcher;
33-
import java.nio.file.Paths;
34-
import java.nio.file.SimpleFileVisitor;
35-
import java.nio.file.StandardOpenOption;
36-
import java.nio.file.attribute.BasicFileAttributes;
37-
import java.util.ArrayList;
38-
import java.util.Date;
39-
import java.util.List;
40-
41-
import javax.ws.rs.core.UriBuilder;
42-
43-
import org.apache.commons.codec.binary.Base64;
44-
import org.apache.commons.io.IOUtils;
45-
import org.apache.log4j.Logger;
46-
import org.json.JSONArray;
47-
import org.json.JSONException;
48-
import org.json.JSONObject;
18+
package it.eng.knowage.engine.api.export.nodejs;
4919

5020
import it.eng.knowage.export.pdf.FrontpageDetails;
5121
import it.eng.knowage.export.wrapper.beans.RenderOptions;
@@ -55,6 +25,23 @@
5525
import it.eng.spagobi.commons.SingletonConfig;
5626
import it.eng.spagobi.commons.dao.DAOFactory;
5727
import it.eng.spagobi.utilities.exceptions.SpagoBIRuntimeException;
28+
import org.apache.commons.codec.binary.Base64;
29+
import org.apache.commons.io.IOUtils;
30+
import org.apache.log4j.Logger;
31+
import org.json.JSONArray;
32+
import org.json.JSONException;
33+
import org.json.JSONObject;
34+
35+
import javax.ws.rs.core.UriBuilder;
36+
import java.io.*;
37+
import java.net.URI;
38+
import java.nio.file.*;
39+
import java.nio.file.attribute.BasicFileAttributes;
40+
import java.util.ArrayList;
41+
import java.util.Date;
42+
import java.util.List;
43+
44+
import static java.nio.charset.StandardCharsets.UTF_8;
5845

5946
/**
6047
*

knowagecockpitengine/src/main/java/it/eng/knowage/engine/cockpit/api/export/pdf/nodejs/PdfExporterV2.java renamed to knowage-export/src/main/java/it/eng/knowage/engine/api/export/nodejs/PdfExporterV2.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,16 @@
1515
* You should have received a copy of the GNU Affero General Public License
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
18-
package it.eng.knowage.engine.cockpit.api.export.pdf.nodejs;
18+
package it.eng.knowage.engine.api.export.nodejs;
19+
20+
import it.eng.knowage.export.pdf.ExportDetails;
21+
import it.eng.knowage.export.pdf.PDFCreator;
22+
import it.eng.knowage.export.wrapper.beans.RenderOptions;
23+
import it.eng.spago.error.EMFUserError;
24+
import it.eng.spagobi.analiticalmodel.document.bo.BIObject;
25+
import org.apache.commons.io.IOUtils;
26+
import org.apache.log4j.Logger;
27+
import org.json.JSONException;
1928

2029
import java.io.IOException;
2130
import java.io.InputStream;
@@ -24,16 +33,6 @@
2433
import java.nio.file.StandardOpenOption;
2534
import java.util.List;
2635

27-
import org.apache.commons.io.IOUtils;
28-
import org.apache.log4j.Logger;
29-
import org.json.JSONException;
30-
31-
import it.eng.knowage.export.pdf.ExportDetails;
32-
import it.eng.knowage.export.pdf.PDFCreator;
33-
import it.eng.knowage.export.wrapper.beans.RenderOptions;
34-
import it.eng.spago.error.EMFUserError;
35-
import it.eng.spagobi.analiticalmodel.document.bo.BIObject;
36-
3736
public class PdfExporterV2 extends AbstractNodeJSBasedExporter {
3837

3938
private static final String OUTPUT_PDF = "output.pdf";

knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/engines.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
engineTypeCd="EXT" classNm="" biobjTypeCd="DOCUMENT_COMPOSITE"
4444
useDataSet="false" useDataSource="false" encrypt="0" />
4545
<ENGINE label="knowagedashboardengine" name="Dashboard Engine" descr="Dashboard Engine"
46-
mainUrl="/knowagecockpitengine/api/1.0/pages/execute" driverNm="it.eng.spagobi.engines.drivers.dashboard.DashboardDriver"
46+
mainUrl="/knowage/api/1.0/dashboardExport/callPuppeteer" driverNm="it.eng.spagobi.engines.drivers.dashboard.DashboardDriver"
4747
engineTypeCd="EXT" classNm="" biobjTypeCd="DASHBOARD"
4848
useDataSet="false" useDataSource="false" encrypt="0" />
4949
<ENGINE label="knowageolapengine" name="OLAP Engine" descr="OLAP Engine"

knowagecockpitengine/src/main/java/it/eng/knowage/engine/cockpit/api/export/png/PngExporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
import java.util.zip.ZipEntry;
2626
import java.util.zip.ZipOutputStream;
2727

28+
import it.eng.knowage.engine.api.export.nodejs.AbstractNodeJSBasedExporter;
2829
import org.apache.commons.io.IOUtils;
2930
import org.apache.log4j.Logger;
3031
import org.json.JSONException;
3132

32-
import it.eng.knowage.engine.cockpit.api.export.pdf.nodejs.AbstractNodeJSBasedExporter;
3333
import it.eng.knowage.export.wrapper.beans.RenderOptions;
3434
import it.eng.spago.error.EMFUserError;
3535
import it.eng.spagobi.analiticalmodel.document.bo.BIObject;

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

Lines changed: 4 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.io.IOException;
2626
import java.net.URI;
2727
import java.net.URISyntaxException;
28-
import java.util.ArrayList;
2928
import java.util.Arrays;
3029
import java.util.Base64;
3130
import java.util.Base64.Encoder;
@@ -38,7 +37,6 @@
3837
import java.util.Map;
3938
import java.util.Map.Entry;
4039
import java.util.Objects;
41-
import java.util.Optional;
4240
import java.util.stream.Collectors;
4341
import java.util.zip.ZipEntry;
4442
import java.util.zip.ZipInputStream;
@@ -56,8 +54,8 @@
5654

5755
import it.eng.knowage.commons.multitenant.OrganizationImageManager;
5856
import it.eng.knowage.engine.api.export.dashboard.excel.DashboardExcelExporter;
57+
import it.eng.knowage.engine.api.export.nodejs.PdfExporterV2;
5958
import it.eng.spagobi.tenant.TenantManager;
60-
import org.apache.commons.lang3.StringUtils;
6159
import org.apache.http.client.utils.URIBuilder;
6260
import org.apache.logging.log4j.LogManager;
6361
import org.apache.logging.log4j.Logger;
@@ -71,15 +69,13 @@
7169
import it.eng.knowage.engine.cockpit.CockpitEngine;
7270
import it.eng.knowage.engine.cockpit.CockpitEngineInstance;
7371
import it.eng.knowage.engine.cockpit.api.AbstractCockpitEngineResource;
74-
import it.eng.knowage.engine.cockpit.api.export.pdf.nodejs.PdfExporterV2;
7572
import it.eng.knowage.engine.cockpit.api.export.png.PngExporter;
7673
import it.eng.knowage.export.wrapper.beans.RenderOptions;
7774
import it.eng.knowage.export.wrapper.beans.ViewportDimensions;
7875
import it.eng.spago.error.EMFInternalError;
7976
import it.eng.spago.error.EMFUserError;
8077
import it.eng.spago.security.IEngUserProfile;
8178
import it.eng.spagobi.analiticalmodel.document.bo.BIObject;
82-
import it.eng.spagobi.behaviouralmodel.analyticaldriver.bo.BIObjectParameter;
8379
import it.eng.spagobi.commons.SingletonConfig;
8480
import it.eng.spagobi.commons.dao.DAOFactory;
8581
import it.eng.spagobi.commons.utilities.GeneralUtilities;
@@ -572,11 +568,7 @@ private String getRequestUrlForPdfExport(HttpServletRequest request) throws JSON
572568
Engine eng = biObject.getEngine();
573569
URIBuilder externalUrl = GeneralUtilities.getBE2BEEngineUrl(eng);
574570

575-
if (isDashboard(eng)) {
576-
manageParametersForDashboards(biObject, documentLabel, externalUrl);
577-
} else {
578-
manageParametersForEverythingElse(externalUrl);
579-
}
571+
manageParameters(externalUrl);
580572
externalUrl.setParameter("export", "true");
581573
return externalUrl.toString();
582574
}
@@ -593,11 +585,7 @@ private String getRequestUrlForExcelExport(HttpServletRequest request) throws JS
593585
Engine eng = biObject.getEngine();
594586
URIBuilder externalUrl = GeneralUtilities.getBE2BEEngineUrl(eng);
595587

596-
if (isDashboard(eng)) {
597-
manageParametersForDashboards(biObject, documentLabel, externalUrl);
598-
} else {
599-
manageParametersForEverythingElse(externalUrl);
600-
}
588+
manageParameters(externalUrl);
601589
externalUrl.setParameter("scheduledexport", "true");
602590
return externalUrl.toString();
603591
}
@@ -640,16 +628,7 @@ private JSONObject buildBaseTemplate() {
640628
return template;
641629
}
642630

643-
private void manageParametersForDashboards(BIObject biObject, String documentLabel, URIBuilder uriBuilder)
644-
throws JSONException {
645-
646-
uriBuilder.setPath(getKnowageVueContext() + "/dashboard/" + documentLabel);
647-
uriBuilder.setParameter("params", createJsonFromParemeters(biObject));
648-
uriBuilder.setParameter("role", getExecutionRoleForDashboard());
649-
addParametersToHideToolbarAndMenuInVue(uriBuilder);
650-
}
651-
652-
private void manageParametersForEverythingElse(URIBuilder uriBuilder) {
631+
private void manageParameters(URIBuilder uriBuilder) {
653632
Map<String, String[]> parameterMap = request.getParameterMap();
654633
for (Entry<String, String[]> parameter : parameterMap.entrySet()) {
655634
String key = parameter.getKey();
@@ -660,114 +639,9 @@ private void manageParametersForEverythingElse(URIBuilder uriBuilder) {
660639
}
661640
}
662641

663-
private String getExecutionRoleForDashboard() {
664-
Map<String, String[]> parameterMap = request.getParameterMap();
665-
String role = Optional.ofNullable(parameterMap.get("SBI_EXECUTION_ROLE")).map(e -> e[0]).orElse("");
666-
if (StringUtils.isEmpty(role)) {
667-
role = Optional.ofNullable(parameterMap.get("role")).map(e -> e[0]).orElse("");
668-
}
669-
return role;
670-
}
671-
672-
private String createJsonFromParemeters(BIObject biObject) throws JSONException {
673-
List<BIObjectParameter> drivers = biObject.getDrivers();
674-
// We wrap parameters map because it could be updated here below
675-
Map<String, String[]> parameterMap = new HashMap<>(request.getParameterMap());
676-
JSONArray parametersAsJson = new JSONArray();
677-
678-
reconcileParametersWithParamsV2FromUrl(parameterMap);
679-
680-
for (BIObjectParameter driver : drivers) {
681-
String urlName = driver.getParameterUrlName();
682-
683-
boolean isMultivalue = driver.isMultivalue();
684-
685-
List<String> values = Optional.ofNullable(parameterMap.get(urlName)).map(Arrays::asList)
686-
.orElse(Collections.emptyList());
687-
List<String> descriptions = Optional.ofNullable(parameterMap.get(urlName + "_description"))
688-
.map(Arrays::asList).orElse(Collections.emptyList());
689-
690-
List<String> splitValues = new ArrayList<>();
691-
if (biObject.getEngine().getLabel().equals("knowagedashboardengine")) {
692-
List<String> finalSplitValues = splitValues;
693-
values.forEach(v -> {
694-
finalSplitValues.addAll(Arrays.asList(v.split(";")));
695-
});
696-
}
697-
698-
if (OUTPUT_TYPE.equals(urlName)) {
699-
LOGGER.debug("Forcing outputType to HTML");
700-
splitValues = Arrays.asList("HTML");
701-
descriptions = Arrays.asList("HTML");
702-
}
703-
704-
JSONObject currentDriverJson = new JSONObject();
705-
706-
JSONArray valuesAsJSONArray = new JSONArray();
707-
708-
for (int i = 0; i < Math.max(splitValues.size(), descriptions.size()); i++) {
709-
Object value = Iterables.get(splitValues, i, "");
710-
Object description = Iterables.get(descriptions, i, "");
711-
712-
JSONObject currValue = new JSONObject();
713-
714-
currValue.put("value", value);
715-
currValue.put("description", description);
716-
717-
valuesAsJSONArray.put(currValue);
718-
}
719-
720-
currentDriverJson.put("value", valuesAsJSONArray);
721-
currentDriverJson.put("urlName", urlName);
722-
currentDriverJson.put("multivalue", isMultivalue);
723-
724-
parametersAsJson.put(currentDriverJson);
725-
}
726-
727-
String parametersAsString = parametersAsJson.toString();
728-
return java.util.Base64.getEncoder().withoutPadding().encodeToString(parametersAsString.getBytes());
729-
}
730-
731-
private boolean isDashboard(Engine eng) {
732-
return "knowagedashboardengine".equals(eng.getLabel());
733-
}
734-
735642
private void addParametersToHideToolbarAndMenuInVue(URIBuilder uriBuilder) {
736643
uriBuilder.setParameter("toolbar", "false");
737644
uriBuilder.setParameter("menu", "false");
738645
uriBuilder.setParameter("finalUser", "true");
739646
}
740-
741-
private void reconcileParametersWithParamsV2FromUrl(Map<String, String[]> parameterMap) throws JSONException {
742-
// Manage new parameters format in Base64
743-
String parametersV2FromUrl = Optional.ofNullable(request.getParameter("params"))
744-
.map(e -> new String(java.util.Base64.getDecoder().decode(e))).orElse("[]");
745-
JSONArray parametersV2FromUrlAsJSONArray = new JSONArray(parametersV2FromUrl);
746-
for (int i = 0; i < parametersV2FromUrlAsJSONArray.length(); i++) {
747-
JSONObject currParameterFromParametersV2 = (JSONObject) parametersV2FromUrlAsJSONArray.get(i);
748-
749-
String urlName = currParameterFromParametersV2.getString("urlName");
750-
751-
if (!parameterMap.containsKey(urlName)) {
752-
List<String> values = new ArrayList<>();
753-
List<String> descriptions = new ArrayList<>();
754-
755-
JSONArray value = currParameterFromParametersV2.getJSONArray("value");
756-
757-
for (int k = 0; k < value.length(); k++) {
758-
JSONObject currentParameterValue = (JSONObject) value.get(k);
759-
760-
String cValue = currentParameterValue.getString("value");
761-
String cDesc = currentParameterValue.getString("description");
762-
763-
values.add(cValue);
764-
descriptions.add(cDesc);
765-
}
766-
767-
parameterMap.put(urlName, values.toArray(new String[0]));
768-
parameterMap.put(urlName + "_description", descriptions.toArray(new String[0]));
769-
}
770-
}
771-
}
772-
773647
}

0 commit comments

Comments
 (0)