- Added portlet for PerformFISH KPI-Data generation
This commit is contained in:
parent
c8c054c491
commit
e43a04cb8e
|
@ -8,7 +8,9 @@ org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
|||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||
|
||||
<wb-module deploy-name="thematic-gateways-portlet">
|
||||
|
||||
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
|
||||
|
||||
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
|
||||
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
||||
<dependent-module archiveName="detachedres-library-1.1.0.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/detachedres-library/detachedres-library">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
|
||||
<property name="context-root" value="thematic-gateways-portlet"/>
|
||||
|
||||
<property name="java-output-path" value="/thematic-gateways-portlet/target/classes"/>
|
||||
|
||||
</wb-module>
|
||||
|
||||
</project-modules>
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<root>
|
||||
<facet id="jst.jaxrs">
|
||||
<node name="libprov">
|
||||
<attribute name="provider-id" value="jaxrs-no-op-library-provider"/>
|
||||
</node>
|
||||
</facet>
|
||||
</root>
|
|
@ -5,4 +5,5 @@
|
|||
<installed facet="jst.web" version="2.4"/>
|
||||
<installed facet="liferay.portlet" version="6.0"/>
|
||||
<installed facet="wst.jsdt.web" version="1.0"/>
|
||||
<installed facet="jst.jaxrs" version="2.0"/>
|
||||
</faceted-project>
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
# Changelog
|
||||
|
||||
## [v7.2.0-SNAPSHOT] - 2021-01-22
|
||||
|
||||
- Added portlet for PerformFISH KPI-Data generation
|
||||
|
||||
## [v7.1.0] - 2020-10-09
|
||||
|
||||
|
|
28
pom.xml
28
pom.xml
|
@ -14,7 +14,7 @@
|
|||
<artifactId>thematic-gateways-portlet</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<name>thematic-gateways-portlet Portlets</name>
|
||||
<version>7.1.0</version>
|
||||
<version>7.2.0-SNAPSHOT</version>
|
||||
<description>
|
||||
Thematic Gateways Portlet
|
||||
</description>
|
||||
|
@ -66,10 +66,34 @@
|
|||
<artifactId>commons-beanutils</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>storagehub-client-library</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>storagehub-model</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.liferay.portal</groupId>
|
||||
<artifactId>portal-service</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>authorization-client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gcube.common</groupId>
|
||||
<artifactId>common-authorization</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.liferay.portal</groupId>
|
||||
<artifactId>portal-service</artifactId>
|
||||
<version>${liferay.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
package org.gube.portlets.user.kpidata;
|
||||
|
||||
public class CallResult {
|
||||
boolean success;
|
||||
String comment;
|
||||
public boolean isSuccess() {
|
||||
return success;
|
||||
}
|
||||
public void setSuccess(boolean success) {
|
||||
this.success = success;
|
||||
}
|
||||
public String getComment() {
|
||||
return comment;
|
||||
}
|
||||
public void setComment(String comment) {
|
||||
this.comment = comment;
|
||||
}
|
||||
public CallResult(boolean success, String comment) {
|
||||
super();
|
||||
this.success = success;
|
||||
this.comment = comment;
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("CallResult [success=");
|
||||
builder.append(success);
|
||||
builder.append(", comment=");
|
||||
builder.append(comment);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package org.gube.portlets.user.kpidata;
|
||||
|
||||
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
|
||||
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.common.portal.PortalContext;
|
||||
import org.gcube.common.resources.gcore.GCoreEndpoint;
|
||||
import org.gcube.common.resources.gcore.GCoreEndpoint.Profile.Endpoint;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
||||
|
||||
import com.liferay.portal.kernel.log.Log;
|
||||
import com.liferay.portal.kernel.log.LogFactoryUtil;
|
||||
|
||||
public class KPIdataUtils {
|
||||
private static Log _log = LogFactoryUtil.getLog(KPIdataUtils.class);
|
||||
|
||||
private static String ANALYTICAL_TOOLKIT_SERVICE_GCORE_ENDPOINT_NAME = "perform-service";
|
||||
private static String ANALYTICAL_TOOLKIT_SERVICE_GCORE_ENDPOINT_CLASS = "Application";
|
||||
public static String ANALYTICAL_TOOLKIT_SERVICE_INTERFACE_NAME = "org.gcube.application.perform.service.PerformService";
|
||||
|
||||
public KPIdataUtils() {
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
public static String getCurrentContext(long groupId) {
|
||||
try {
|
||||
PortalContext pContext = PortalContext.getConfiguration();
|
||||
return pContext.getCurrentScope(""+groupId);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<GCoreEndpoint> getAnalyticalToolkitServiceInstance(String context) throws Exception {
|
||||
String currScope = ScopeProvider.instance.get();
|
||||
ScopeProvider.instance.set(context);
|
||||
SimpleQuery query = queryFor(GCoreEndpoint.class);
|
||||
query.addCondition("$resource/Profile/ServiceClass/text() eq '"+ ANALYTICAL_TOOLKIT_SERVICE_GCORE_ENDPOINT_CLASS +"'");
|
||||
query.addCondition("$resource/Profile/ServiceName/text() eq '"+ ANALYTICAL_TOOLKIT_SERVICE_GCORE_ENDPOINT_NAME +"'");
|
||||
DiscoveryClient<GCoreEndpoint> client = clientFor(GCoreEndpoint.class);
|
||||
List<GCoreEndpoint> toReturn = client.submit(query);
|
||||
ScopeProvider.instance.set(currScope);
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
public static String getAnalyticalToolkitEndpoint(String context) {
|
||||
List<GCoreEndpoint> analyticalServices = null;
|
||||
try {
|
||||
analyticalServices = getAnalyticalToolkitServiceInstance(context);
|
||||
if (analyticalServices == null || analyticalServices.isEmpty()) {
|
||||
return "Cound not find Analytical Toolkit service";
|
||||
}
|
||||
GCoreEndpoint endpoint = analyticalServices.get(0);
|
||||
Collection<Endpoint> list = endpoint.profile().endpoints().asCollection();
|
||||
|
||||
URI theURI = null;
|
||||
for (Endpoint ep : list) {
|
||||
if (ep.name().equals(ANALYTICAL_TOOLKIT_SERVICE_INTERFACE_NAME)) {
|
||||
_log.info("Analytical Toolkit GCoreEndpoint: "+ep.uri());
|
||||
theURI = ep.uri();
|
||||
}
|
||||
}
|
||||
String endpointSSL = "https://"+theURI.getHost()+theURI.getPath();
|
||||
_log.info("Returning endpointSSL " + endpointSSL);
|
||||
return endpointSSL;
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package org.gube.portlets.user.kpidata;
|
||||
|
||||
public enum PFISHGrowingStages {
|
||||
|
||||
GROW_OUT_INDIVIDUAL("Grow out Individual"),
|
||||
GROW_OUT_INDIVIDUAL_CLOSED_BATCHES("Grow out Individual (closed)"),
|
||||
GROW_OUT_AGGREGATED("Grow out Aggregated"),
|
||||
GROW_OUT_AGGREGATED_CLOSED_BATCHES("Grow out Aggregated (closed)"),
|
||||
HATCHERY_INDIVIDUAL("Hatchery Individual"),
|
||||
HATCHERY_INDIVIDUAL_CLOSED_BATCHES("Hatchery Individual (closed)"),
|
||||
PRE_ONGROWING("Pre-grow Individual"),
|
||||
PRE_ONGROWING_CLOSED_BATCHES("Pre-grow Individual (closed)");
|
||||
|
||||
private String filename;
|
||||
|
||||
PFISHGrowingStages(String filename) {
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return filename;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,238 @@
|
|||
package org.gube.portlets.user.kpidata;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.portlet.PortletException;
|
||||
import javax.portlet.RenderRequest;
|
||||
import javax.portlet.RenderResponse;
|
||||
import javax.portlet.ResourceRequest;
|
||||
import javax.portlet.ResourceResponse;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||
import org.gcube.common.portal.PortalContext;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||
import org.gcube.common.storagehub.model.items.FolderItem;
|
||||
import org.gcube.common.storagehub.model.items.Item;
|
||||
|
||||
import com.liferay.portal.kernel.exception.PortalException;
|
||||
import com.liferay.portal.kernel.exception.SystemException;
|
||||
import com.liferay.portal.kernel.json.JSONArray;
|
||||
import com.liferay.portal.kernel.json.JSONException;
|
||||
import com.liferay.portal.kernel.json.JSONFactoryUtil;
|
||||
import com.liferay.portal.kernel.json.JSONObject;
|
||||
import com.liferay.portal.kernel.log.LogFactoryUtil;
|
||||
import com.liferay.portal.model.Group;
|
||||
import com.liferay.portal.service.GroupLocalServiceUtil;
|
||||
import com.liferay.portal.util.PortalUtil;
|
||||
import com.liferay.util.bridges.mvc.MVCPortlet;
|
||||
|
||||
/**
|
||||
* Portlet implementation class PerformFISH_KPI_SnapshotData
|
||||
*/
|
||||
public class PerformFISH_KPI_SnapshotData extends MVCPortlet {
|
||||
private static com.liferay.portal.kernel.log.Log _log = LogFactoryUtil.getLog(PerformFISH_KPI_SnapshotData.class);
|
||||
private static final String KPI_DATA_FOLDER_NAME = "KPI-Data";
|
||||
|
||||
|
||||
public static final String PERFORM_SERVICE_METHOD_ENDPOINT = "/performance?gcube-token=";
|
||||
|
||||
public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException {
|
||||
super.render(request, response);
|
||||
}
|
||||
|
||||
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, PortletException {
|
||||
String token = "";
|
||||
long groupId = 0;
|
||||
String context = "";
|
||||
String username = "";
|
||||
try {
|
||||
Group group = (Group) GroupLocalServiceUtil.getGroup(PortalUtil.getScopeGroupId(resourceRequest));
|
||||
groupId = group.getGroupId();
|
||||
context = KPIdataUtils.getCurrentContext(groupId);
|
||||
username = PortalUtil.getUser(resourceRequest).getScreenName();
|
||||
token = PortalContext.getConfiguration().getCurrentUserToken(context, username);
|
||||
} catch (PortalException | SystemException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
resourceResponse.setContentType("application/json");
|
||||
|
||||
String endpoint = KPIdataUtils.getAnalyticalToolkitEndpoint(context);
|
||||
String idFolderWhereToWriteFiles = createFoldersIfNotExists(token, context);
|
||||
StringBuilder sb = new StringBuilder(endpoint)
|
||||
.append(PERFORM_SERVICE_METHOD_ENDPOINT)
|
||||
.append(token)
|
||||
.append("&batch_type=");
|
||||
_log.info("calling performService on context " + context);
|
||||
List<CallResult> results = null;
|
||||
try {
|
||||
results = performAllCalls(sb.toString(), token, context, idFolderWhereToWriteFiles);
|
||||
} catch (JSONException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
JSONArray jsonArray = JSONFactoryUtil.createJSONArray();
|
||||
for (CallResult result : results) {
|
||||
JSONObject fileObject = JSONFactoryUtil.createJSONObject();
|
||||
fileObject.put("success", result.isSuccess());
|
||||
fileObject.put("comment", result.getComment());
|
||||
jsonArray.put(fileObject);
|
||||
}
|
||||
resourceResponse.getWriter().println(jsonArray);
|
||||
super.serveResource(resourceRequest, resourceResponse);
|
||||
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param endpoint
|
||||
* @param authorizationToken
|
||||
* @param context
|
||||
* @param folderOfTheDayId
|
||||
* @return
|
||||
* @throws JSONException
|
||||
* @throws IOException
|
||||
*/
|
||||
private List<CallResult> performAllCalls(String endpoint, String authorizationToken, String context, String folderOfTheDayId) throws JSONException, IOException {
|
||||
List<CallResult> callResults = new ArrayList<>();
|
||||
for(PFISHGrowingStages type : PFISHGrowingStages.values()) {
|
||||
_log.info(type + "-" + type.getFileName());
|
||||
String request = endpoint+type;
|
||||
JSONObject jsonObj = readFromURL(request);
|
||||
|
||||
ScopeProvider.instance.set(context);
|
||||
SecurityTokenProvider.instance.set(authorizationToken);
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
|
||||
Iterator<String> iterator = jsonObj.keys();
|
||||
iterator.forEachRemaining((key) -> {
|
||||
if (!key.endsWith("_internal")) {
|
||||
StringBuilder sb = new StringBuilder(type.getFileName()).append(" - ").append(key).append(".csv");
|
||||
String httpURLofTheCSV = jsonObj.getString(key);
|
||||
boolean result = saveToWorkspaceVREFolder(shc, sb.toString(), httpURLofTheCSV, folderOfTheDayId);
|
||||
callResults.add(new CallResult(result, sb.toString()));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
return callResults;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param filename
|
||||
* @param fileURL
|
||||
* @param authorizationToken
|
||||
* @param context
|
||||
* @param folderOfTheDayId
|
||||
* @return
|
||||
*/
|
||||
private boolean saveToWorkspaceVREFolder(StorageHubClient shc, String filename, String fileURL, String folderOfTheDayId) {
|
||||
try {
|
||||
FolderContainer folderOfTheDay = shc.open(folderOfTheDayId).asFolder();
|
||||
InputStream is = new URL(fileURL).openStream();
|
||||
folderOfTheDay.uploadFile(is, filename, "");
|
||||
_log.info("uploaded file " + filename + " with success");
|
||||
} catch (Exception e) {
|
||||
_log.error("Failed to upload file " + filename, e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param authorizationToken
|
||||
* @param context
|
||||
* @return the is of the folder for the day, it creates it of not existent
|
||||
*/
|
||||
private String createFoldersIfNotExists(String authorizationToken, String context) {
|
||||
String idFolderWhereToWriteFiles = null;
|
||||
ScopeProvider.instance.set(context);
|
||||
SecurityTokenProvider.instance.set(authorizationToken);
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
FolderContainer vreFolder = shc.openVREFolder();
|
||||
try {
|
||||
List<? extends Item> items = vreFolder.list().getItems();
|
||||
FolderContainer kpiDataFolder = null;
|
||||
//verify that KPI_DATA_FOLDER_NAME folder exists, else create it
|
||||
boolean kpiDataFolderExists = false;
|
||||
for (Item item : items) {
|
||||
if (item instanceof FolderItem && item.getName().equalsIgnoreCase(KPI_DATA_FOLDER_NAME)) {
|
||||
kpiDataFolderExists = true;
|
||||
kpiDataFolder = shc.open(item.getId()).asFolder();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!kpiDataFolderExists)
|
||||
kpiDataFolder = vreFolder.newFolder(KPI_DATA_FOLDER_NAME, "contains the generated data collected and anonymised");
|
||||
//e.g. 2021-01-22
|
||||
String folderOfTheDay = computeDayFoldername();
|
||||
boolean folderOfTheDayExists = false;
|
||||
for (Item item : kpiDataFolder.list().getItems()) {
|
||||
if (item instanceof FolderItem && item.getName().equalsIgnoreCase(folderOfTheDay)) {
|
||||
folderOfTheDayExists = true;
|
||||
idFolderWhereToWriteFiles = item.getId();
|
||||
}
|
||||
}
|
||||
if (!folderOfTheDayExists) {
|
||||
idFolderWhereToWriteFiles = kpiDataFolder.newFolder(folderOfTheDay, "contains the generated data collected and anonymised for the day " + folderOfTheDay).getId();
|
||||
_log.info("Created the folder for the day (" + folderOfTheDay + ") into KPI-Data Folder, returning id="+idFolderWhereToWriteFiles);
|
||||
} else {
|
||||
_log.info("The folder for the day (" + folderOfTheDay + ") exists already into KPI-Data Folder, returning id="+idFolderWhereToWriteFiles);
|
||||
}
|
||||
} catch (StorageHubException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return idFolderWhereToWriteFiles;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
* @throws IOException
|
||||
* @throws JSONException
|
||||
*/
|
||||
private static JSONObject readFromURL(String request) throws IOException, JSONException {
|
||||
URL url= new URL(null, request);
|
||||
HttpsURLConnection conn= (HttpsURLConnection) url.openConnection();
|
||||
conn.setDoOutput( true );
|
||||
conn.setInstanceFollowRedirects( false );
|
||||
conn.setRequestMethod( "GET" );
|
||||
conn.setRequestProperty( "Content-Type", "application/json");
|
||||
conn.setRequestProperty( "charset", "utf-8");
|
||||
conn.setUseCaches( false );
|
||||
|
||||
InputStream in = conn.getInputStream();
|
||||
String encoding = conn.getContentEncoding();
|
||||
encoding = encoding == null ? "UTF-8" : encoding;
|
||||
String body = IOUtils.toString(in, encoding);
|
||||
|
||||
JSONObject jsonObj = JSONFactoryUtil.createJSONObject(body);
|
||||
|
||||
return jsonObj;
|
||||
}
|
||||
|
||||
//this returns the date as String as we want it: e.g. 2021-01-22
|
||||
private String computeDayFoldername() {
|
||||
String format = "yyyy-MM-dd";
|
||||
DateFormat dateFormatter = new SimpleDateFormat(format);
|
||||
String date = dateFormatter.format(new Date());
|
||||
return date;
|
||||
}
|
||||
}
|
|
@ -6,4 +6,7 @@
|
|||
<portlet id="thematic-gateways-portlet"></portlet>
|
||||
<portlet id="vre-yard"></portlet>
|
||||
</category>
|
||||
<category name="category.sample">
|
||||
<portlet id="perform-fish-kpi-snapshot-data"></portlet>
|
||||
</category>
|
||||
</display>
|
|
@ -22,6 +22,17 @@
|
|||
</footer-portlet-javascript>
|
||||
<css-class-wrapper>vre-yard-portlet</css-class-wrapper>
|
||||
</portlet>
|
||||
<portlet>
|
||||
<portlet-name>perform-fish-kpi-snapshot-data</portlet-name>
|
||||
<icon>/icon.png</icon>
|
||||
<header-portlet-css>/css/main.css</header-portlet-css>
|
||||
<footer-portlet-javascript>
|
||||
/js/main.js
|
||||
</footer-portlet-javascript>
|
||||
<css-class-wrapper>
|
||||
perform-fish-kpi-snapshot-data-portlet
|
||||
</css-class-wrapper>
|
||||
</portlet>
|
||||
<role-mapper>
|
||||
<role-name>administrator</role-name>
|
||||
<role-link>Administrator</role-link>
|
||||
|
|
|
@ -67,4 +67,37 @@
|
|||
<role-name>user</role-name>
|
||||
</security-role-ref>
|
||||
</portlet>
|
||||
<portlet>
|
||||
<portlet-name>perform-fish-kpi-snapshot-data</portlet-name>
|
||||
<display-name>PerformFISH KPI Snapshot Data</display-name>
|
||||
<portlet-class>
|
||||
org.gube.portlets.user.kpidata.PerformFISH_KPI_SnapshotData
|
||||
</portlet-class>
|
||||
<init-param>
|
||||
<name>view-template</name>
|
||||
<value>/html/performfish_kpi_snapshotdata/view-kpi-data.jsp</value>
|
||||
</init-param>
|
||||
<expiration-cache>0</expiration-cache>
|
||||
<supports>
|
||||
<mime-type>text/html</mime-type>
|
||||
<portlet-mode>view</portlet-mode>
|
||||
</supports>
|
||||
<portlet-info>
|
||||
<title>PerformFISH KPI Snapshot Data</title>
|
||||
<short-title>Perform Fish Kpi Snapshot Data</short-title>
|
||||
<keywords></keywords>
|
||||
</portlet-info>
|
||||
<security-role-ref>
|
||||
<role-name>administrator</role-name>
|
||||
</security-role-ref>
|
||||
<security-role-ref>
|
||||
<role-name>guest</role-name>
|
||||
</security-role-ref>
|
||||
<security-role-ref>
|
||||
<role-name>power-user</role-name>
|
||||
</security-role-ref>
|
||||
<security-role-ref>
|
||||
<role-name>user</role-name>
|
||||
</security-role-ref>
|
||||
</portlet>
|
||||
</portlet-app>
|
|
@ -0,0 +1,62 @@
|
|||
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
|
||||
<%@include file="../init.jsp"%>
|
||||
|
||||
<portlet:defineObjects />
|
||||
<portlet:resourceURL var="resourceURL">
|
||||
</portlet:resourceURL>
|
||||
<%
|
||||
Group group = (Group) GroupLocalServiceUtil.getGroup(PortalUtil.getScopeGroupId(request));
|
||||
long currentGroupId = group.getGroupId();
|
||||
pageContext.setAttribute("groupId", currentGroupId);
|
||||
|
||||
%>
|
||||
|
||||
<script type="text/javascript">
|
||||
function submitCallToPerformService(endpoint, groupId) {
|
||||
console.log("submitCallToPerformService:" + endpoint);
|
||||
$('#performServiceButton').attr("disabled", true);
|
||||
$('#performServiceButton')
|
||||
.html(
|
||||
'<i class="icon-refresh icon-white">in progress ...please wait');
|
||||
$('#feedbackResult').html('');
|
||||
$.ajax({
|
||||
url : endpoint,
|
||||
type : 'POST',
|
||||
datatype : 'json',
|
||||
data : {
|
||||
groupId : groupId,
|
||||
userId : Liferay.ThemeDisplay.getUserId()
|
||||
},
|
||||
success : function(data) {
|
||||
var resultArray = JSON.parse(JSON.stringify(data));
|
||||
var feedbackResultHTML = '<p class="lead">Operation Result</p><ul>';
|
||||
resultArray.forEach(item => {
|
||||
var feedbackVisual = item.success ? ' <span style="color: green;">created succesfully</span> ' : ' <span style="color: red;">failed</span> ';
|
||||
feedbackResultHTML += '<li>'+item.comment+':'+ feedbackVisual+'</li>';
|
||||
});
|
||||
feedbackResultHTML += '</ul>'
|
||||
$('#feedbackResult').html(feedbackResultHTML);
|
||||
$('#performServiceButton').hide();
|
||||
$('#reloadPageButton').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<button name="snapshotdata" id="performServiceButton" type="button"
|
||||
class="btn btn-primary"
|
||||
onClick="submitCallToPerformService('${resourceURL}', '${groupId}')">Get
|
||||
New Data</button>
|
||||
<button name="refresh" id="reloadPageButton" type="button"
|
||||
class="btn btn-primary" onClick="location.reload();">Please
|
||||
click here to refresh the content of the folder, or to enable the Get
|
||||
Data functionality again</button>
|
||||
|
||||
<div id="feedbackResult"></div>
|
||||
|
||||
|
||||
<script>
|
||||
$('#reloadPageButton').hide();
|
||||
</script>
|
|
@ -0,0 +1 @@
|
|||
|
Loading…
Reference in New Issue