true if the new password is correct, exception otherwise
*/
- public boolean isValid(final SbiUser tmpUser, String oldPwd, String newPwd, String newPwd2) throws Exception {
+ public boolean isValid(final SbiUser tmpUser, String oldPwd, boolean isEncrypted, String newPwd, String newPwd2) throws Exception {
IConfigDAO configDao = DAOFactory.getSbiConfigDAO();
List configChecks = configDao.loadConfigParametersByProperties(PROP_NODE);
logger.debug("checks found on db: " + configChecks.size());
if (isValid(newPwd, newPwd2)) {
- if(oldPwd != null && StringUtilities.isEmpty(oldPwd)) {
+ if (oldPwd != null && StringUtilities.isEmpty(oldPwd)) {
logger.debug("The old password is empty.");
throw new EMFUserError(EMFErrorSeverity.ERROR, 14011);
}
-
- if (tmpUser == null || tmpUser != null
- && !Password.encriptPassword(oldPwd).equals(tmpUser.getPassword())) {
+
+ String oldPwdEnc = !isEncrypted ? Password.encriptPassword(oldPwd, tmpUser.getPassword().startsWith(Password.PREFIX_SHA_PWD_ENCRIPTING)) : oldPwd;
+ if (tmpUser == null || tmpUser != null && !oldPwdEnc.equals(tmpUser.getPassword())) {
logger.debug("The old pwd is uncorrect.");
throw new EMFUserError(EMFErrorSeverity.ERROR, 14010);
}
-
+
for (Object lstConfigCheck : configChecks) {
Config check = (Config) lstConfigCheck;
-
+
if (check.getLabel().equals(SpagoBIConstants.CHANGEPWDMOD_CHANGE)) {
if (oldPwd != null && oldPwd.equalsIgnoreCase(newPwd)) {
logger.debug("The password's doesn't be equal the lastest.");
@@ -191,7 +193,11 @@ public boolean isValid(final SbiUser tmpUser, String oldPwd, String newPwd, Stri
}
}
}
-
+
return true;
}
+
+ public boolean isValid(final SbiUser tmpUser, String oldPwd, String newPwd, String newPwd2) throws Exception {
+ return isValid(tmpUser, oldPwd, false, newPwd, newPwd2);
+ }
}
diff --git a/knowage-core/src/main/java/it/eng/spagobi/engines/drivers/svgviewer/SvgViewerDriver.java b/knowage-core/src/main/java/it/eng/spagobi/engines/drivers/svgviewer/SvgViewerDriver.java
index 2d8d0d274a3..38d3b3ddeed 100644
--- a/knowage-core/src/main/java/it/eng/spagobi/engines/drivers/svgviewer/SvgViewerDriver.java
+++ b/knowage-core/src/main/java/it/eng/spagobi/engines/drivers/svgviewer/SvgViewerDriver.java
@@ -17,19 +17,26 @@
*/
package it.eng.spagobi.engines.drivers.svgviewer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.json.JSONException;
+
+import it.eng.spago.base.SourceBean;
+import it.eng.spago.base.SourceBeanException;
import it.eng.spagobi.engines.drivers.DefaultOutputParameter;
import it.eng.spagobi.engines.drivers.DefaultOutputParameter.TYPE;
import it.eng.spagobi.engines.drivers.generic.GenericDriver;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* @author Marco Cortella (marco.cortella@eng.it)
*
*/
public class SvgViewerDriver extends GenericDriver {
+ static private Logger logger = Logger.getLogger(SvgViewerDriver.class);
+
@Override
public ListloadObjMetadataByID.
- *
- * @param key The choosed metadata id key
+ *
+ * @param key The choosed metadata id key
* @param response The response Source Bean
* @throws EMFUserError If an exception occurs
- */
- private void getObjMetadata(SourceBean request, SourceBean response) throws EMFUserError {
- try {
- ObjMetadata meta = DAOFactory.getObjMetadataDAO().loadObjMetaDataByID(new Integer((String)request.getAttribute("ID")));
+ */
+ private void getObjMetadata(SourceBean request, SourceBean response) throws EMFUserError {
+ try {
+ ObjMetadata meta = DAOFactory.getObjMetadataDAO().loadObjMetaDataByID(new Integer((String) request.getAttribute("ID")));
this.modalita = SpagoBIConstants.DETAIL_MOD;
- if (request.getAttribute("SUBMESSAGEDET") != null &&
- ((String)request.getAttribute("SUBMESSAGEDET")).equalsIgnoreCase(MOD_SAVEBACK))
- {
+ if (request.getAttribute("SUBMESSAGEDET") != null && ((String) request.getAttribute("SUBMESSAGEDET")).equalsIgnoreCase(MOD_SAVEBACK)) {
response.setAttribute("loopback", "true");
return;
}
@@ -129,41 +128,40 @@ private void getObjMetadata(SourceBean request, SourceBean response) throws EMFU
response.setAttribute("modality", modalita);
response.setAttribute("metaObj", meta);
} catch (Exception ex) {
- logger.error("Cannot fill response container" + ex.getLocalizedMessage());
+ logger.error("Cannot fill response container" + ex.getLocalizedMessage());
HashMap params = new HashMap();
params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE);
throw new EMFUserError(EMFErrorSeverity.ERROR, 13003, new Vector(), params);
}
-
+
}
- /**
- * Inserts/Modifies the detail of a object metadta according to the user request.
- * When a metadata is modified, the modifyObjMetadata method is called; when a new
- * metadata is added, the insertObjMetadatamethod is called. These two cases are
- * differentiated by the mod String input value .
- *
- * @param request The request information contained in a SourceBean Object
- * @param mod A request string used to differentiate insert/modify operations
- * @param response The response SourceBean
- * @throws EMFUserError If an exception occurs
+
+ /**
+ * Inserts/Modifies the detail of a object metadta according to the user request. When a metadata is modified, the modifyObjMetadata method is
+ * called; when a new metadata is added, the insertObjMetadatamethod is called. These two cases are differentiated by the mod
+ * String input value .
+ *
+ * @param request The request information contained in a SourceBean Object
+ * @param mod A request string used to differentiate insert/modify operations
+ * @param response The response SourceBean
+ * @throws EMFUserError If an exception occurs
* @throws SourceBeanException If a SourceBean exception occurs
*/
- private void modifyObjMetadata(SourceBean serviceRequest, String mod, SourceBean serviceResponse)
- throws EMFUserError, SourceBeanException {
-
+ private void modifyObjMetadata(SourceBean serviceRequest, String mod, SourceBean serviceResponse) throws EMFUserError, SourceBeanException {
+
try {
RequestContainer reqCont = getRequestContainer();
SessionContainer sessCont = reqCont.getSessionContainer();
SessionContainer permSess = sessCont.getPermanentContainer();
- IEngUserProfile profile = (IEngUserProfile)permSess.getAttribute(IEngUserProfile.ENG_USER_PROFILE);
-
- IObjMetadataDAO dao=DAOFactory.getObjMetadataDAO();
+ IEngUserProfile profile = (IEngUserProfile) permSess.getAttribute(IEngUserProfile.ENG_USER_PROFILE);
+
+ IObjMetadataDAO dao = DAOFactory.getObjMetadataDAO();
dao.setUserProfile(profile);
-
+
ObjMetadata metaNew = recoverObjMetadataDetails(serviceRequest);
-
+
EMFErrorHandler errorHandler = getErrorHandler();
-
+
// if there are some validation errors into the errorHandler does not write into DB
Collection errors = errorHandler.getErrors();
if (errors != null && errors.size() > 0) {
@@ -177,113 +175,103 @@ private void modifyObjMetadata(SourceBean serviceRequest, String mod, SourceBean
}
}
}
-
- if (mod.equalsIgnoreCase(SpagoBIConstants.DETAIL_INS)) {
- //if a ds with the same label not exists on db ok else error
- if (dao.loadObjMetadataByLabel(metaNew.getLabel()) != null){
+
+ if (mod.equalsIgnoreCase(SpagoBIConstants.DETAIL_INS)) {
+ // if a ds with the same label not exists on db ok else error
+ List metadataWithSameLabel = dao.loadAllObjMetadataByLabelAndCase(metaNew.getLabel(), false);
+ if (metadataWithSameLabel != null && metadataWithSameLabel.size() > 0) {
HashMap params = new HashMap();
params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE);
- EMFUserError error = new EMFUserError(EMFErrorSeverity.ERROR, 13004, new Vector(), params );
+ EMFUserError error = new EMFUserError(EMFErrorSeverity.ERROR, 13004, new Vector(), params);
getErrorHandler().addError(error);
return;
- }
+ }
dao.insertObjMetadata(metaNew);
-
+
ObjMetadata tmpMeta = dao.loadObjMetadataByLabel(metaNew.getLabel());
metaNew.setObjMetaId(tmpMeta.getObjMetaId());
- mod = SpagoBIConstants.DETAIL_MOD;
- } else {
- //update metadata
- dao.modifyObjMetadata(metaNew);
- }
+ mod = SpagoBIConstants.DETAIL_MOD;
+ } else {
+ // update metadata
+ dao.modifyObjMetadata(metaNew);
+ }
IDomainDAO domaindao = DAOFactory.getDomainDAO();
List dataTypes = domaindao.loadListDomainsByType("OBJMETA_DATA_TYPE");
serviceResponse.setAttribute(OBJMETA_DATA_TYPE, dataTypes);
-
- if (serviceRequest.getAttribute("SUBMESSAGEDET") != null &&
- ((String)serviceRequest.getAttribute("SUBMESSAGEDET")).equalsIgnoreCase(MOD_SAVE)) {
+
+ if (serviceRequest.getAttribute("SUBMESSAGEDET") != null && ((String) serviceRequest.getAttribute("SUBMESSAGEDET")).equalsIgnoreCase(MOD_SAVE)) {
serviceResponse.setAttribute("modality", mod);
- serviceResponse.setAttribute("metaObj", metaNew);
+ serviceResponse.setAttribute("metaObj", metaNew);
+ return;
+ } else if (serviceRequest.getAttribute("SUBMESSAGEDET") != null
+ && ((String) serviceRequest.getAttribute("SUBMESSAGEDET")).equalsIgnoreCase(MOD_SAVEBACK)) {
+ serviceResponse.setAttribute("loopback", "true");
return;
}
- else if (serviceRequest.getAttribute("SUBMESSAGEDET") != null &&
- ((String)serviceRequest.getAttribute("SUBMESSAGEDET")).equalsIgnoreCase(MOD_SAVEBACK)){
- serviceResponse.setAttribute("loopback", "true");
- return;
- }
- } catch (EMFUserError e){
+ } catch (EMFUserError e) {
logger.error("Cannot fill response container" + e.getLocalizedMessage());
HashMap params = new HashMap();
params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE);
throw new EMFUserError(EMFErrorSeverity.ERROR, 13005, new Vector(), params);
-
+
}
-
- catch (Exception ex) {
- logger.error("Cannot fill response container" , ex);
+
+ catch (Exception ex) {
+ logger.error("Cannot fill response container", ex);
throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
- }
+ }
}
/**
* Deletes an obj metadata choosed by user from the metadata list.
- *
- * @param request The request SourceBean
- * @param mod A request string used to differentiate delete operation
- * @param response The response SourceBean
- * @throws EMFUserError If an Exception occurs
+ *
+ * @param request The request SourceBean
+ * @param mod A request string used to differentiate delete operation
+ * @param response The response SourceBean
+ * @throws EMFUserError If an Exception occurs
* @throws SourceBeanException If a SourceBean Exception occurs
*/
- private void deleteObjMetadata(SourceBean request, String mod, SourceBean response)
- throws EMFUserError, SourceBeanException {
-
+ private void deleteObjMetadata(SourceBean request, String mod, SourceBean response) throws EMFUserError, SourceBeanException {
+
try {
String id = (String) request.getAttribute("ID");
// if the metadata is associated with any BIObjects or BISuobjets, creates an error
- /*boolean bObjects = DAOFactory.getObjMetadataDAO().hasBIObjAssociated(id);
- boolean bSubobjects = DAOFactory.getObjMetadataDAO().hasSubObjAssociated(id);
- if (bObjects || bSubobjects){
- HashMap params = new HashMap();
- params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE);
- EMFUserError error = new EMFUserError(EMFErrorSeverity.ERROR, 13007, new Vector(), params );
- getErrorHandler().addError(error);
- return;
- }*/
-
- //delete the metadata
+ /*
+ * boolean bObjects = DAOFactory.getObjMetadataDAO().hasBIObjAssociated(id); boolean bSubobjects =
+ * DAOFactory.getObjMetadataDAO().hasSubObjAssociated(id); if (bObjects || bSubobjects){ HashMap params = new HashMap();
+ * params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE); EMFUserError error = new EMFUserError(EMFErrorSeverity.ERROR, 13007, new
+ * Vector(), params ); getErrorHandler().addError(error); return; }
+ */
+
+ // delete the metadata
ObjMetadata meta = DAOFactory.getObjMetadataDAO().loadObjMetaDataByID(new Integer(id));
DAOFactory.getObjMetadataDAO().eraseObjMetadata(meta);
- }
- catch (EMFUserError e){
- logger.error("Cannot fill response container" + e.getLocalizedMessage());
- HashMap params = new HashMap();
- params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE);
- throw new EMFUserError(EMFErrorSeverity.ERROR, 13006, new Vector(), params);
-
- }
- catch (Exception ex) {
- ex.printStackTrace();
- logger.error("Cannot fill response container" ,ex);
+ } catch (EMFUserError e) {
+ logger.error("Cannot fill response container" + e.getLocalizedMessage());
+ HashMap params = new HashMap();
+ params.put(AdmintoolsConstants.PAGE, ListObjMetadataModule.MODULE_PAGE);
+ throw new EMFUserError(EMFErrorSeverity.ERROR, 13006, new Vector(), params);
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ logger.error("Cannot fill response container", ex);
throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
- }
- response.setAttribute("loopback", "true");
+ }
+ response.setAttribute("loopback", "true");
}
-
-
/**
- * Instantiates a new objmetadata object when a new metadata insertion is required, in order
- * to prepare the page for the insertion.
- *
+ * Instantiates a new objmetadata object when a new metadata insertion is required, in order to prepare the page for the insertion.
+ *
* @param response The response SourceBean
* @throws EMFUserError If an Exception occurred
*/
private void newObjMetadata(SourceBean response) throws EMFUserError {
-
+
try {
-
+
ObjMetadata meta = null;
this.modalita = SpagoBIConstants.DETAIL_INS;
response.setAttribute("modality", modalita);
@@ -295,38 +283,36 @@ private void newObjMetadata(SourceBean response) throws EMFUserError {
meta.setName("");
meta.setCreationDate(null);
response.setAttribute("metaObj", meta);
-
+
IDomainDAO domaindao = DAOFactory.getDomainDAO();
List dataTypes = domaindao.loadListDomainsByType("OBJMETA_DATA_TYPE");
response.setAttribute(OBJMETA_DATA_TYPE, dataTypes);
-
+
} catch (Exception ex) {
- logger.error("Cannot prepare page for the insertion" , ex);
+ logger.error("Cannot prepare page for the insertion", ex);
throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
}
-
+
}
+ private ObjMetadata recoverObjMetadataDetails(SourceBean serviceRequest) throws EMFUserError, SourceBeanException, IOException {
+ ObjMetadata meta = new ObjMetadata();
- private ObjMetadata recoverObjMetadataDetails (SourceBean serviceRequest) throws EMFUserError, SourceBeanException, IOException {
- ObjMetadata meta = new ObjMetadata();
-
- String idStr = (String)serviceRequest.getAttribute("ID");
+ String idStr = (String) serviceRequest.getAttribute("ID");
Integer id = new Integer(idStr);
- String description = (String)serviceRequest.getAttribute("DESCR");
- String label = (String)serviceRequest.getAttribute("LABEL");
- String name = (String)serviceRequest.getAttribute("NAME");
- String dataType = (String)serviceRequest.getAttribute("DATA_TYPE");
- //String creationDate = (String)serviceRequest.getAttribute("USER");
-
+ String description = (String) serviceRequest.getAttribute("DESCR");
+ String label = (String) serviceRequest.getAttribute("LABEL");
+ String name = (String) serviceRequest.getAttribute("NAME");
+ String dataType = (String) serviceRequest.getAttribute("DATA_TYPE");
+ // String creationDate = (String)serviceRequest.getAttribute("USER");
+
meta.setObjMetaId(id.intValue());
meta.setDescription(description);
meta.setLabel(label);
meta.setDataType(Integer.valueOf(dataType));
meta.setName(name);
- //meta.setCreationDate(creationDate);
-
-
+ // meta.setCreationDate(creationDate);
+
return meta;
}
diff --git a/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/init/ResourceExportFolderSchedulerInitializer.java b/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/init/ResourceExportFolderSchedulerInitializer.java
new file mode 100644
index 00000000000..570bff64362
--- /dev/null
+++ b/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/init/ResourceExportFolderSchedulerInitializer.java
@@ -0,0 +1,119 @@
+package it.eng.spagobi.tools.scheduler.init;
+
+import org.apache.log4j.Logger;
+
+import it.eng.spago.base.SourceBean;
+import it.eng.spago.init.InitializerIFace;
+import it.eng.spagobi.commons.bo.Config;
+import it.eng.spagobi.commons.dao.DAOFactory;
+import it.eng.spagobi.tools.scheduler.bo.Job;
+import it.eng.spagobi.tools.scheduler.bo.Trigger;
+import it.eng.spagobi.tools.scheduler.dao.ISchedulerDAO;
+import it.eng.spagobi.tools.scheduler.jobs.ResourceExportFolderCleaningJob;
+import it.eng.spagobi.tools.scheduler.utils.PredefinedCronExpression;
+
+public class ResourceExportFolderSchedulerInitializer implements InitializerIFace {
+ public static final String DEFAULT_JOB_NAME = "CleanResourceExportFolderJob";
+ public static final String DEFAULT_TRIGGER_NAME = "schedule_resource_export_cleaning";
+
+ public static final String RESOURCE_EXPORT_FOLDER_SCHEDULING_FULL_CLEAN = "SPAGOBI.RESOURCE.EXPORT.FOLDER.SCHEDULING_FULL_CLEAN";
+
+ private String valueCheck = PredefinedCronExpression.DAILY.getLabel();
+
+ private final SourceBean _config = null;
+ private transient Logger logger = Logger.getLogger(ResourceExportFolderSchedulerInitializer.class);
+
+ @Override
+ public void init(SourceBean config) {
+ logger.debug("IN");
+ try {
+ initCleanForDefaultTenant();
+ } catch (Exception e) {
+ } finally {
+ logger.debug("OUT");
+ }
+
+ }
+
+ public void initCleanForDefaultTenant() {
+
+ ISchedulerDAO schedulerDAO = null;
+ try {
+ logger.debug("IN");
+ schedulerDAO = DAOFactory.getSchedulerDAO();
+ /* Tenant is mandatory. Set DEFAULT_TENANT but job is for all the tenants */
+ schedulerDAO.setTenant("DEFAULT_TENANT");
+ Job jobDetail = schedulerDAO.loadJob(DEFAULT_JOB_NAME, DEFAULT_JOB_NAME);
+ if (jobDetail == null) {
+ // CREATE JOB DETAIL
+ jobDetail = new Job();
+ jobDetail.setName(DEFAULT_JOB_NAME);
+ jobDetail.setGroupName(DEFAULT_JOB_NAME);
+ jobDetail.setDescription(DEFAULT_JOB_NAME);
+ jobDetail.setDurable(true);
+ jobDetail.setVolatile(false);
+ jobDetail.setRequestsRecovery(true);
+ jobDetail.setJobClass(ResourceExportFolderCleaningJob.class);
+
+ schedulerDAO.insertJob(jobDetail);
+ logger.debug("Added job with name " + DEFAULT_JOB_NAME);
+ }
+
+ Config configValue = DAOFactory.getSbiConfigDAO().loadConfigParametersByLabel(RESOURCE_EXPORT_FOLDER_SCHEDULING_FULL_CLEAN);
+
+ if (configValue != null && configValue.isActive()) {
+ valueCheck = configValue.getValueCheck();
+ }
+
+ String cronExpression = getCronExpression(valueCheck);
+ schedulerDAO.deleteTrigger(DEFAULT_TRIGGER_NAME, DEFAULT_JOB_NAME);
+ if (cronExpression != null) {
+ String nameTrig = DEFAULT_TRIGGER_NAME;
+
+ Trigger simpleTrigger = new Trigger();
+ simpleTrigger.setName(nameTrig);
+ simpleTrigger.setGroupName(DEFAULT_JOB_NAME);
+ simpleTrigger.setJob(jobDetail);
+ simpleTrigger.getChronExpression().setExpression(cronExpression);
+ simpleTrigger.setRunImmediately(false);
+
+ schedulerDAO.insertTrigger(simpleTrigger);
+ logger.debug("Added trigger with name " + DEFAULT_TRIGGER_NAME);
+ } else {
+ logger.debug("The value " + valueCheck
+ + " is not a valid value for schedule RESOURCE EXPORT FOLDER cleaning trigger. Please provide a valid one and restart the Server. PERIODIC RESOURCE EXPORT FOLDER CLEANING DISABLED.");
+ }
+ logger.debug("OUT");
+ } catch (Exception e) {
+ logger.error("Error while initializing scheduler ", e);
+ } finally {
+ if (schedulerDAO != null) {
+ schedulerDAO.setTenant(null);
+ }
+ }
+ }
+
+ private String getCronExpression(String valueCheck) {
+ if (valueCheck == null) {
+ logger.debug("This value is [" + valueCheck + "]");
+ return null;
+ }
+
+ for (PredefinedCronExpression value : PredefinedCronExpression.values()) {
+ if (valueCheck.equalsIgnoreCase(value.getLabel())) {
+ logger.debug("Found a predefined cron expression with label equals to [" + valueCheck + "]");
+ logger.debug("The cron expression is equals to [" + value.getExpression() + "]");
+ return value.getExpression();
+ }
+ }
+ logger.debug("No predefined cron expression found with label equals to [" + valueCheck + "]. Returning null.");
+ return null;
+ }
+
+ @Override
+ public SourceBean getConfig() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/jobs/ResourceExportFolderCleaningJob.java b/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/jobs/ResourceExportFolderCleaningJob.java
new file mode 100644
index 00000000000..91ec235f045
--- /dev/null
+++ b/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/jobs/ResourceExportFolderCleaningJob.java
@@ -0,0 +1,67 @@
+/*
+ * Knowage, Open Source Business Intelligence suite
+ * Copyright (C) 2016 Engineering Ingegneria Informatica S.p.A.
+ *
+ * Knowage is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Knowage is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package it.eng.spagobi.tools.scheduler.jobs;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import it.eng.spagobi.commons.dao.DAOFactory;
+import it.eng.spagobi.commons.metadata.SbiTenant;
+import it.eng.spagobi.tenant.Tenant;
+import it.eng.spagobi.tenant.TenantManager;
+import it.eng.spagobi.tools.dataset.resource.export.ResourceExportFolderCleaningManager;
+
+public class ResourceExportFolderCleaningJob extends AbstractSpagoBIJob implements Job {
+
+ static private Logger logger = Logger.getLogger(ResourceExportFolderCleaningJob.class);
+
+ @Override
+ public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+ logger.debug("IN");
+ try {
+ executeInternal();
+ } finally {
+ logger.debug("OUT");
+ }
+ }
+
+ private void executeInternal() {
+
+ logger.debug("IN");
+ try {
+ ResourceExportFolderCleaningManager resourceExportFolderCleaningManager = new ResourceExportFolderCleaningManager();
+ List allTenants = DAOFactory.getTenantsDAO().loadAllTenants();
+ for (SbiTenant sbiTenant : allTenants) {
+
+ TenantManager.setTenant(new Tenant(sbiTenant.getName()));
+ resourceExportFolderCleaningManager.executeCleaning();
+ this.unsetTenant();
+ }
+
+ logger.debug("Resource export folder cleaning ended succesfully!");
+ } catch (Exception e) {
+ logger.error("Error while executiong job ", e);
+ } finally {
+ logger.debug("OUT");
+ }
+ }
+}
diff --git a/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/utils/SchedulerUtilitiesV2.java b/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/utils/SchedulerUtilitiesV2.java
index 4273e54e7a0..190d372f1c3 100644
--- a/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/utils/SchedulerUtilitiesV2.java
+++ b/knowage-core/src/main/java/it/eng/spagobi/tools/scheduler/utils/SchedulerUtilitiesV2.java
@@ -245,7 +245,11 @@ public static JobTrigger getJobTriggerFromJsonRequest(JSONObject jsonObject, JSO
}
jobTrigger.setZonedStartTime(jsonObject.optString(JobTrigger.ZONED_START_TIME));
- jobTrigger.setZonedEndTime(jsonObject.optString(JobTrigger.ZONED_END_TIME));
+ try {
+ jobTrigger.setZonedEndTime(jsonObject.getString(JobTrigger.ZONED_END_TIME));
+ } catch (JSONException e) {
+ // End time can be optional
+ }
jobTrigger.setChrono(((JSONObject) jsonObject.opt(JobTrigger.CHRONO)).toString().replaceAll("\"", "'"));
JSONArray ja = (JSONArray) jsonObject.opt(JobTrigger.DOCUMENTS);
diff --git a/knowage-core/src/main/java/it/eng/spagobi/wapp/services/ReadHtmlFile.java b/knowage-core/src/main/java/it/eng/spagobi/wapp/services/ReadHtmlFile.java
index c6f138b4297..de0e70d3ffe 100644
--- a/knowage-core/src/main/java/it/eng/spagobi/wapp/services/ReadHtmlFile.java
+++ b/knowage-core/src/main/java/it/eng/spagobi/wapp/services/ReadHtmlFile.java
@@ -17,6 +17,16 @@
*/
package it.eng.spagobi.wapp.services;
+import java.io.FileInputStream;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+
+import it.eng.knowage.menu.api.MenuManagementAPI;
import it.eng.spago.base.SourceBean;
import it.eng.spago.dispatching.action.AbstractHttpAction;
import it.eng.spago.error.EMFErrorSeverity;
@@ -28,15 +38,6 @@
import it.eng.spagobi.commons.utilities.UserUtilities;
import it.eng.spagobi.wapp.bo.Menu;
-import java.io.FileInputStream;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.log4j.Logger;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-
public class ReadHtmlFile extends AbstractHttpAction {
static private Logger logger = Logger.getLogger(ReadHtmlFile.class);
@@ -70,6 +71,12 @@ public void service(SourceBean serviceRequest, SourceBean serviceResponse) throw
logger.debug("menuId=" + menuId);
if (menuId != null) {
Menu menu = DAOFactory.getMenuDAO().loadMenuByID(Integer.valueOf(menuId));
+ boolean accessible = new MenuManagementAPI(UserUtilities.getUserProfile()).isAccessibleMenu(menu);
+ if (!accessible) {
+ logger.error("No role found for menu with id = " + menu.getMenuId() + ". Not allowed menu.");
+ throw new Exception("No role found for menu with id = " + menu.getMenuId() + ". Not allowed menu.");
+ }
+
String fileName = menu.getStaticPage();
if (fileName == null) {
diff --git a/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTest1.java b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTest1.java
new file mode 100644
index 00000000000..64421c8e5a0
--- /dev/null
+++ b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTest1.java
@@ -0,0 +1,34 @@
+package it.eng.spagobi.tools.dataset.resource.export.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import it.eng.spagobi.tools.dataset.resource.export.ResourceExportFolderCleaningManager;
+import it.eng.spagobi.tools.dataset.resource.export.utils.ResourceExportFolderCleaningManagerUtils;
+
+public class ResourceExportFolderCleaningTest1 extends ResourceExportFolderCleaningTestMain {
+
+ private static final String FOLDER_PATH = "C:\\temp\\TestMain1\\";
+ private ResourceExportFolderCleaningManager resourceExportFolderCleaningManager = new ResourceExportFolderCleaningManager();
+
+ @Before
+ public void prepare() throws Exception {
+ ResourceExportFolderCleaningManagerUtils cleaningManagerUtils = new ResourceExportFolderCleaningManagerUtils();
+ cleaningManagerUtils.createFilesUntilFolderSize(FOLDER_PATH, MAX_FOLDER_SIZE);
+
+ resourceExportFolderCleaningManager.executeCleaning(FOLDER_PATH, MAX_FOLDER_SIZE, CLEANING_PERCENTAGE);
+
+ }
+
+ @Test
+ public void test() throws Exception {
+ Long actualFolderSize = resourceExportFolderCleaningManager.folderSize(new File(FOLDER_PATH));
+
+ assertEquals("Expected FolderSize", true, actualFolderSize < MAX_FOLDER_SIZE * (1 - CLEANING_PERCENTAGE));
+ }
+
+}
diff --git a/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTest2.java b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTest2.java
new file mode 100644
index 00000000000..bd72359204a
--- /dev/null
+++ b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTest2.java
@@ -0,0 +1,34 @@
+package it.eng.spagobi.tools.dataset.resource.export.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import it.eng.spagobi.tools.dataset.resource.export.ResourceExportFolderCleaningManager;
+import it.eng.spagobi.tools.dataset.resource.export.utils.ResourceExportFolderCleaningManagerUtils;
+
+public class ResourceExportFolderCleaningTest2 extends ResourceExportFolderCleaningTestMain {
+
+ private static final String FOLDER_PATH = "C:\\temp\\TestMain2\\";
+ private ResourceExportFolderCleaningManager resourceExportFolderCleaningManager = new ResourceExportFolderCleaningManager();
+
+ @Before
+ public void prepare() throws Exception {
+ ResourceExportFolderCleaningManagerUtils cleaningManagerUtils = new ResourceExportFolderCleaningManagerUtils();
+ cleaningManagerUtils.createFilesUntilFolderSize(FOLDER_PATH, MAX_FOLDER_SIZE - 2 * ResourceExportFolderCleaningManagerUtils.DEFAULT_FILE_SIZE);
+
+ resourceExportFolderCleaningManager.executeCleaning(FOLDER_PATH, MAX_FOLDER_SIZE, CLEANING_PERCENTAGE);
+
+ }
+
+ @Test
+ public void test() throws Exception {
+ Long actualFolderSize = resourceExportFolderCleaningManager.folderSize(new File(FOLDER_PATH));
+
+ assertEquals("Expected FolderSize", true, actualFolderSize < MAX_FOLDER_SIZE * (1 - CLEANING_PERCENTAGE));
+ }
+
+}
diff --git a/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTestMain.java b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTestMain.java
new file mode 100644
index 00000000000..7ccf74bf173
--- /dev/null
+++ b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/test/ResourceExportFolderCleaningTestMain.java
@@ -0,0 +1,6 @@
+package it.eng.spagobi.tools.dataset.resource.export.test;
+
+public class ResourceExportFolderCleaningTestMain {
+ protected static final Long MAX_FOLDER_SIZE = 104857600L;
+ protected static final Double CLEANING_PERCENTAGE = 30.0;
+}
diff --git a/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/utils/ResourceExportFolderCleaningManagerUtils.java b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/utils/ResourceExportFolderCleaningManagerUtils.java
new file mode 100644
index 00000000000..8649529e934
--- /dev/null
+++ b/knowage-core/src/test/java/it/eng/spagobi/tools/dataset/resource/export/utils/ResourceExportFolderCleaningManagerUtils.java
@@ -0,0 +1,69 @@
+package it.eng.spagobi.tools.dataset.resource.export.utils;
+
+import java.io.File;
+import java.io.RandomAccessFile;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ResourceExportFolderCleaningManagerUtils {
+
+ public static final long DEFAULT_FILE_SIZE = 10485760L;
+
+ public boolean createSingleFile(String path, Long length) {
+ boolean wellCreated = false;
+ RandomAccessFile rafile;
+ try {
+ rafile = new RandomAccessFile(path, "rw");
+ rafile.setLength(length);
+ wellCreated = true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return wellCreated;
+ }
+
+ public void createFilesUntilFolderSize(String folderPath, Long folderSize, Long fileSize) {
+ if (!new File(folderPath).exists()) {
+ new File(folderPath).mkdirs();
+ } else {
+ for (File file : new File(folderPath).listFiles()) {
+ file.delete();
+ }
+ new File(folderPath).delete();
+ new File(folderPath).mkdirs();
+ }
+
+ Map filesMap = new HashMap();
+
+ Long currentFolderSize = 0L;
+ int i = 0;
+ do {
+
+ filesMap.put(folderPath + "file_" + i++, fileSize);
+
+ currentFolderSize += fileSize;
+
+ } while (currentFolderSize <= folderSize);
+
+ for (String filePath : filesMap.keySet()) {
+ createSingleFile(filePath, filesMap.get(filePath));
+ }
+
+ }
+
+ public void createFilesUntilFolderSize(String folderPath, Long folderSize) {
+ createFilesUntilFolderSize(folderPath, folderSize, DEFAULT_FILE_SIZE);
+ }
+
+ public long folderSize(File folder) {
+ long length = 0;
+ for (File file : folder.listFiles()) {
+ if (file.isFile()) {
+ length += file.length();
+ } else {
+ length += folderSize(file);
+ }
+ }
+ return length;
+ }
+}
diff --git a/knowage/src/main/resources/MessageFiles/messages.properties b/knowage/src/main/resources/MessageFiles/messages.properties
index 7df8bb3a75e..5eb8090b575 100644
--- a/knowage/src/main/resources/MessageFiles/messages.properties
+++ b/knowage/src/main/resources/MessageFiles/messages.properties
@@ -618,6 +618,8 @@ Admintools.listModalitiesValueModule_Name = MODALITIES VALUE MANAGEMENT
authError = Authentication Error!
changePwd = Change Password
changePwd.pwdChanged = Password changed
+change_password_here = Change Password Here
+old_enc_method_message = Due to the improvement of the security policy, it is necessary to change the password.
CheckboxTag.showChecked = View only checked elements
community.accept.mail.1 = Dear
community.accept.mail.2 = user
@@ -900,7 +902,7 @@ newKpi.target.invalidPeriod = Invalid period
newKpi.threshold.mandatory = Threshold is mandatory
newKpi.threshold.name.mandatory = Threshold Name is mandatory
newKpi.threshold.type.mandatory = Threshold Type is mandatory
-newKpi.threshold.values.mandatory = Error. There are no threshold values
+newKpi.threshold.values.mandatory = There are no threshold values
noAccount = You don't have an account?
old_password = Old Password
password = Password
@@ -2288,7 +2290,7 @@ tree.objectstree.update = Update
tree.rootfolder.description = Functionalities (Areas)
tree.rootfolder.name = Functionalities (Areas)
username = User Name
-userPwdInvalid = User or password invalid
+userPwdInvalid = Invalid username or password, try again. If the problem persists, contact the administrator: your account may have been blocked due to the maximum number of failed login attempts.
weka.execution.documentDetails = Document
weka.execution.executionKo = Execution of Weka flow terminated with errors.
weka.execution.executionOk = Execution of Weka flow successfully terminated!
diff --git a/knowage/src/main/resources/MessageFiles/messages_es_ES.properties b/knowage/src/main/resources/MessageFiles/messages_es_ES.properties
index 79d5cbc8422..123fd51a261 100644
--- a/knowage/src/main/resources/MessageFiles/messages_es_ES.properties
+++ b/knowage/src/main/resources/MessageFiles/messages_es_ES.properties
@@ -592,7 +592,6 @@ newKpi.target.invalidPeriod=Periodo invalido
newKpi.threshold.mandatory=El umbral es obligatorio
newKpi.threshold.name.mandatory=El umbral es obligatorio
newKpi.threshold.type.mandatory=El tipo del umbral es obligatorio
-newKpi.threshold.values.mandatory=Error. No hay valores de umbral
noAccount=¿No tienes una cuenta?
old_password=Contraseña anterior
password=Contraseña
@@ -1964,7 +1963,6 @@ tree.objectstree.update=Actualizar
tree.rootfolder.description=Funcionalidades (Áreas)
tree.rootfolder.name=Funcionalidades (Áreas)
username=Nombre Usuario
-userPwdInvalid=Usuario o contraseña inavalido
weka.execution.documentDetails=Documento
weka.execution.executionKo=La ejecución del flujo de Weka finalizó con errores
weka.execution.executionOk=La ejecución del flujo de Weka finalizó con éxito\!
diff --git a/knowage/src/main/resources/MessageFiles/messages_fr_FR.properties b/knowage/src/main/resources/MessageFiles/messages_fr_FR.properties
index e5979f08aa9..276398b3f7d 100644
--- a/knowage/src/main/resources/MessageFiles/messages_fr_FR.properties
+++ b/knowage/src/main/resources/MessageFiles/messages_fr_FR.properties
@@ -595,7 +595,6 @@ newKpi.target.invalidPeriod=Période invalide
newKpi.threshold.mandatory=Seuil obligatoire
newKpi.threshold.name.mandatory=Nom de seuil obligatoire
newKpi.threshold.type.mandatory=Type de seuil obligatoire
-newKpi.threshold.values.mandatory=Erreur\: il n'y a pas des valeurs seuil
noAccount=Pas de compte ?
old_password=Ancien mot de passe
password=Mot de passe
@@ -1983,7 +1982,6 @@ tree.objectstree.update=Modifier
tree.rootfolder.description=Fonctionnalités (Espace)
tree.rootfolder.name=Fonctionnalités (Espace)
username=Nom Utilisateur
-userPwdInvalid=Identifiant ou mot-de-passe invalide
weka.execution.documentDetails=Document
weka.execution.executionKo=Exécution du flux weka terminée avec des erreurs
weka.execution.executionOk=Exécution du flux Weka terminée avec succès \!
diff --git a/knowage/src/main/resources/MessageFiles/messages_it_IT.properties b/knowage/src/main/resources/MessageFiles/messages_it_IT.properties
index 87ec9af7822..12540aeff4e 100644
--- a/knowage/src/main/resources/MessageFiles/messages_it_IT.properties
+++ b/knowage/src/main/resources/MessageFiles/messages_it_IT.properties
@@ -336,6 +336,8 @@ Admintools.listModalitiesValueModule_Name=GESTIONE DEI VALORE DELLA MODALITA
authError=Errore di autenticazione\!
changePwd=Cambia Password
changePwd.pwdChanged=Password cambiata
+change_password_here=Cambia password qui
+old_enc_method_message=A causa del miglioramento della politica di sicurezza, è necessario modificare la password.
CheckboxTag.showChecked=Visualizza solo gli elementi selezionati
community.accept.mail.1=Caro
community.accept.mail.2=utente
@@ -633,7 +635,7 @@ newKpi.target.invalidPeriod=Periodo non valido
newKpi.threshold.mandatory=Soglia obbligatoria
newKpi.threshold.name.mandatory=Nome di soglia obbligatorio
newKpi.threshold.type.mandatory=Tipo di soglia obbligatorio
-newKpi.threshold.values.mandatory=Errore. No ci sono valori di soglia
+newKpi.threshold.values.mandatory=Errore. Non esistono valori di soglia
noAccount=Non hai un account?
old_password=Vecchia Password
password=Password
@@ -2058,7 +2060,7 @@ tree.objectstree.update=Aggiorna
tree.rootfolder.description=Funzionalità (Aree)
tree.rootfolder.name=Funzionalità (Aree)
username=Nome Utente
-userPwdInvalid=User o password non valida
+userPwdInvalid=Username o password non validi, riprovare. Se il problema persiste, contatta l'amministratore\: il tuo account potrebbe essere stato bloccato a causa del numero massimo di tentativi di accesso non riusciti.
weka.execution.documentDetails=Documento
weka.execution.executionKo=Esecuzione dell'analisi Weka terminata con errori.
weka.execution.executionOk=Esecuzione dell'analisi Weka terminata con successo\!
diff --git a/knowage/src/main/resources/MessageFiles/messages_pt_BR.properties b/knowage/src/main/resources/MessageFiles/messages_pt_BR.properties
index 283fd5a511d..011b0f52fab 100644
--- a/knowage/src/main/resources/MessageFiles/messages_pt_BR.properties
+++ b/knowage/src/main/resources/MessageFiles/messages_pt_BR.properties
@@ -1484,7 +1484,6 @@ tree.objectstree.update=Atualizar
tree.rootfolder.description=Recursos (áreas)
tree.rootfolder.name=Recursos (áreas)
username=Nome do usuário
-userPwdInvalid=Usuário ou senha inválidos
weka.execution.documentDetails=Documento
weka.execution.noRelatedDocuments=Nenhum documento relacionado
weka.execution.parameters=Execução de controladores analíticos\:
diff --git a/knowage/src/main/resources/MessageFiles/messages_zh_Hans_CN.properties b/knowage/src/main/resources/MessageFiles/messages_zh_Hans_CN.properties
index 768f2e8c32f..8cbf1dfa571 100644
--- a/knowage/src/main/resources/MessageFiles/messages_zh_Hans_CN.properties
+++ b/knowage/src/main/resources/MessageFiles/messages_zh_Hans_CN.properties
@@ -589,7 +589,6 @@ newKpi.target.invalidPeriod=无效的周期
newKpi.threshold.mandatory=阈值必填
newKpi.threshold.name.mandatory=阈值名称必填
newKpi.threshold.type.mandatory=阈值类型必填
-newKpi.threshold.values.mandatory=错误.没有阈值
noAccount=您没有账户吗?
old_password=旧密码
password=密码
@@ -1987,7 +1986,6 @@ tree.objectstree.update=更新
tree.rootfolder.description=功能 (区域)
tree.rootfolder.name=功能 (区域)
username=用户名
-userPwdInvalid=用户或密码无效
weka.execution.documentDetails=文档
weka.execution.executionKo=Weka流的执行以错误结束.
weka.execution.executionOk=Weka流的执行成功结束\!
diff --git a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/alert.xml b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/alert.xml
index 39ffa5008cd..3a6ec3892aa 100644
--- a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/alert.xml
+++ b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/alert.xml
@@ -1,11 +1,11 @@
+ template="angular_1.4/tools/alert/actions/sendMail/templates/sendMail.html" />
+ template="angular_1.4/tools/alert/actions/executeETL/templates/executeETL.html" />
+ template="angular_1.4/tools/alert/actions/contextBroker/templates/contextBroker.html" />
+ template="angular_1.4/tools/alert/listeners/kpiListener/templates/kpiListener.html" />
\ No newline at end of file
diff --git a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/configs.xml b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/configs.xml
index fb63a199f75..5248fad13de 100644
--- a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/configs.xml
+++ b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/configs.xml
@@ -23,16 +23,16 @@
valueCheck="abcdefghjklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
valueType="STRING" category="SECURITY" />
+ isActive="true" valueCheck="true" valueType="STRING" category="SECURITY" />
@@ -545,14 +545,19 @@
+ category="GENERIC_CONFIGURATION" />
+
+
+ valueCheck="5" valueType="NUM" category="SECURITY" />
+
+
+
+
+
+
+
diff --git a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/dataSource.xml b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/dataSource.xml
new file mode 100644
index 00000000000..976cbf4fdbd
--- /dev/null
+++ b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/dataSource.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/domains.xml b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/domains.xml
index 6a7b8a85bc7..0123ae51be9 100644
--- a/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/domains.xml
+++ b/knowage/src/main/resources/it/eng/spagobi/commons/initializers/metadata/config/domains.xml
@@ -466,8 +466,12 @@
-
+
+
+
diff --git a/knowage/src/main/resources/log4j.properties b/knowage/src/main/resources/log4j.properties
index 854a36bd9d9..9e987c7c7b8 100644
--- a/knowage/src/main/resources/log4j.properties
+++ b/knowage/src/main/resources/log4j.properties
@@ -35,6 +35,14 @@ log4j.appender.knowage_SM.MaxBackupIndex=0
log4j.appender.knowage_SM.layout=org.apache.log4j.PatternLayout
log4j.appender.knowage_SM.layout.ConversionPattern=%d{DATE} %5p %c.%M:%L - %m%n
+log4j.appender.knowage_REFCP=org.apache.log4j.RollingFileAppender
+log4j.appender.knowage_REFCP.File=${catalina.base}/logs/ResourceExportFolderCleaningManager.log
+log4j.appender.knowage_REFCP.maxFileSize=10000KB
+log4j.appender.knowage_REFCP.maxBackupIndex=0
+log4j.appender.knowage_REFCP.layout=org.apache.log4j.PatternLayout
+log4j.appender.knowage_REFCP.layout.ConversionPattern=%d{DATE} %5p %L - %m%n
+log4j.appender.knowage_REFCP.append=true
+
#log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=%c.%M: %m%n
@@ -73,6 +81,16 @@ log4j.additivity.dataset.audit=false
log4j.logger.it.eng.spagobi.tools.dataset.common.dataproxy.JDBCDataProxy=INFO, FILE_AUDIT
log4j.additivity.it.eng.spagobi.tools.dataset.common.dataproxy.JDBCDataProxy=false
+log4j.logger.it.eng.spagobi.tools.dataset.common.dataproxy.JDBCRedShiftDataProxy=INFO, FILE_AUDIT
+log4j.additivity.it.eng.spagobi.tools.dataset.common.dataproxy.JDBCRedShiftDataProxy=false
+log4j.logger.it.eng.spagobi.tools.dataset.common.dataproxy.SolrDataProxy=INFO, FILE_AUDIT
+log4j.additivity.it.eng.spagobi.tools.dataset.common.dataproxy.SolrDataProxy=false
log4j.logger.it.eng.knowage.tools.servermanager=ERROR, knowage_SM
-log4j.additivity.it.eng=false
+log4j.additivity.it.eng.knowage.tools.servermanager=false
+
+log4j.logger.it.eng.spagobi.behaviouralmodel.lov.bo.QueryDetail=ERROR, knowage
+log4j.additivity.it.eng.spagobi.behaviouralmodel.lov.bo.QueryDetail=false
+
+log4j.logger.it.eng.spagobi.api.v2.export=INFO, knowage
+log4j.additivity.it.eng.spagobi.api.v2.export=false
\ No newline at end of file
diff --git a/knowage/src/main/resources/predefinedGroovyScript.groovy b/knowage/src/main/resources/predefinedGroovyScript.groovy
index 55b49eea1d8..639a5c7849d 100644
--- a/knowage/src/main/resources/predefinedGroovyScript.groovy
+++ b/knowage/src/main/resources/predefinedGroovyScript.groovy
@@ -58,3 +58,7 @@ public String split(String attrName, String splitter) {
strBuf.append("");
return strBuf.toString();
};
+
+public String NULLIF(BigDecimal expression1, Integer expression2) {
+ return expression1.compareTo(expression2)==0 ? null : expression1;
+};
\ No newline at end of file
diff --git a/knowage/src/main/webapp/META-INF/context.xml b/knowage/src/main/webapp/META-INF/context.xml
index 0c3a3202c27..7ec0e40da17 100644
--- a/knowage/src/main/webapp/META-INF/context.xml
+++ b/knowage/src/main/webapp/META-INF/context.xml
@@ -7,8 +7,9 @@
-
+
-
+
+
diff --git a/knowage/src/main/webapp/WEB-INF/conf/config/initializers.xml b/knowage/src/main/webapp/WEB-INF/conf/config/initializers.xml
index ac21741159e..1083a09f151 100644
--- a/knowage/src/main/webapp/WEB-INF/conf/config/initializers.xml
+++ b/knowage/src/main/webapp/WEB-INF/conf/config/initializers.xml
@@ -28,6 +28,9 @@
+
+
+
diff --git a/knowage/src/main/webapp/WEB-INF/conf/config/internal_profiling.xml b/knowage/src/main/webapp/WEB-INF/conf/config/internal_profiling.xml
index 4800d59f952..d19201fb1ce 100644
--- a/knowage/src/main/webapp/WEB-INF/conf/config/internal_profiling.xml
+++ b/knowage/src/main/webapp/WEB-INF/conf/config/internal_profiling.xml
@@ -90,6 +90,7 @@
+
@@ -117,6 +118,8 @@
+
+
@@ -133,6 +136,7 @@
+
@@ -155,6 +159,7 @@
+
@@ -180,12 +185,13 @@
+
-
+
@@ -202,5 +208,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/knowage/src/main/webapp/WEB-INF/jsp/commons/preview.jsp b/knowage/src/main/webapp/WEB-INF/jsp/commons/preview.jsp
index 10e2e43a846..ee50f140550 100644
--- a/knowage/src/main/webapp/WEB-INF/jsp/commons/preview.jsp
+++ b/knowage/src/main/webapp/WEB-INF/jsp/commons/preview.jsp
@@ -16,15 +16,41 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
--%>
<%@page import="it.eng.spagobi.commons.utilities.GeneralUtilities"%>
+<%@page import="it.eng.spagobi.commons.utilities.urls.IUrlBuilder"%>
+<%@page import="it.eng.spagobi.commons.utilities.urls.UrlBuilderFactory"%>
+<%@page import="it.eng.spago.base.*"%>
+<%
+ RequestContainer aRequestContainer = null;
+ IUrlBuilder urlBuilder = null;
+ String sbiMode = null;
+
+ // case of portlet mode
+ aRequestContainer = RequestContainerPortletAccess.getRequestContainer(request);
+ if (aRequestContainer == null) {
+ // case of web mode
+ aRequestContainer = RequestContainer.getRequestContainer();
+ if(aRequestContainer == null){
+ //case of REST
+ aRequestContainer = RequestContainerAccess.getRequestContainer(request);
+ }
+ }
+
+ String channelType = aRequestContainer.getChannelType();
+ if ("PORTLET".equalsIgnoreCase(channelType)) sbiMode = "PORTLET";
+ else sbiMode = "WEB";
+
+ // create url builder
+ urlBuilder = UrlBuilderFactory.getUrlBuilder(sbiMode);
+%>
-
+ ">
-
+ ">
+
@@ -1118,18 +1119,27 @@ div.lower i {
-
-
+
+
-
+
+
+ Python
+ R
+
+
+
+
+
-
+
-
- {{e.label}}
+ {{e.label}}
+ {{e.label}}
@@ -1138,13 +1148,14 @@ div.lower i {
- {{translate.load("sbi.ds.python.checkEnvironment")}}
+ {{translate.load("sbi.ds.python.checkEnvironment")}}
+ {{translate.load("sbi.ds.python.checkEnvironment")}}
-
-
+
+
{{translate.load("sbi.catalogues.generic.reqired");}}
@@ -1153,12 +1164,12 @@ div.lower i {
-
-
+
{{translate.load("sbi.catalogues.generic.reqired");}}
diff --git a/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/lovsManagement.jsp b/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/lovsManagement.jsp
index a539d844471..da4e6784050 100644
--- a/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/lovsManagement.jsp
+++ b/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/lovsManagement.jsp
@@ -1,351 +1,294 @@
<%--
-Knowage, Open Source Business Intelligence suite
-Copyright (C) 2016 Engineering Ingegneria Informatica S.p.A.
-
-Knowage is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-Knowage is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
---%>
-
-
+ Knowage, Open Source Business Intelligence suite
+ Copyright (C) 2016 Engineering Ingegneria Informatica S.p.A.
+
+ Knowage is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Knowage is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+ --%>
-
+ The main JSP page for the management of the LOV catalog.
+
+ Author: Danilo Ristovski (danristo, danilo.ristovski@mht.net)
+ Author: Stefan Petrovic (spetrovic, Stefan.Petrovic@mht.net)
+ -->
<%@ page language="java" pageEncoding="UTF-8" session="true"%>
-
<%-- ---------------------------------------------------------------------- --%>
<%-- JAVA IMPORTS --%>
<%-- ---------------------------------------------------------------------- --%>
<%@include file="/WEB-INF/jsp/commons/angular/angularResource.jspf"%>
-
-
-
-
-
-
-
-
-
- <%@include file="/WEB-INF/jsp/commons/angular/angularImport.jsp"%>
-
- ">
-
-
-
-
-">
-">
-
-
-" />
-
-
-
-
-
-
-
-
-
- LOVS Management
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{translate.load("sbi.ds.test")}}
-
-
-
- {{translate.load("sbi.datasource.testing")}}
-
-
-
- {{translate.load("sbi.generic.save")}}
-
-
-
-
-
-
-
-
-
+
+
+
+
+ <%@include file="/WEB-INF/jsp/commons/angular/angularImport.jsp"%>
+ ">
+
+
+ ">
+ ">
+
+
+ " />
+
+
+
+
+
+
+
+ LOVS Management
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{translate.load("sbi.ds.test")}}
+
+
+ {{translate.load("sbi.datasource.testing")}}
+
+
+ {{translate.load("sbi.generic.save")}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/rolesManagement.jsp b/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/rolesManagement.jsp
index 9b787ed2bfc..9a24aac16a7 100644
--- a/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/rolesManagement.jsp
+++ b/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/rolesManagement.jsp
@@ -421,7 +421,16 @@ along with this program. If not, see .
-
+
+
+
+
+
+
+
+
+
{{translate.load("sbi.roles.finalUserCan");}}
diff --git a/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/usersManagement.jsp b/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/usersManagement.jsp
index 154a00b79a9..49ac131f378 100644
--- a/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/usersManagement.jsp
+++ b/knowage/src/main/webapp/WEB-INF/jsp/tools/catalogue/usersManagement.jsp
@@ -1,193 +1,172 @@
<%--
-Knowage, Open Source Business Intelligence suite
-Copyright (C) 2016 Engineering Ingegneria Informatica S.p.A.
-
-Knowage is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
-Knowage is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see .
---%>
-
+ Knowage, Open Source Business Intelligence suite
+ Copyright (C) 2016 Engineering Ingegneria Informatica S.p.A.
+
+ Knowage is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Knowage is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+ --%>
<%@ page language="java" pageEncoding="UTF-8" session="true"%>
-
<%-- ---------------------------------------------------------------------- --%>
<%-- JAVA IMPORTS --%>
<%-- ---------------------------------------------------------------------- --%>
-
<%@include file="/WEB-INF/jsp/commons/angular/angularResource.jspf"%>
-
-<%@include file="/WEB-INF/jsp/commons/angular/angularImport.jsp"%>
-
-">
-
-
-
-Users Management
-
-<%
- Boolean isSSOEnabledH = GeneralUtilities.isSSOEnabled();
-%>
-
-
-
- <%if(includeInfusion){ %>
- <%@include file="/WEB-INF/jsp/commons/infusion/infusionTemplate.html"%>
- <%} %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ <%@include file="/WEB-INF/jsp/commons/angular/angularImport.jsp"%>
+
+ ">
+
+
+ Users Management
+ <%
+ Boolean isSSOEnabledH = GeneralUtilities.isSSOEnabled();
+ %>
+
+
+ <%if(includeInfusion){ %>
+ <%@include file="/WEB-INF/jsp/commons/infusion/infusionTemplate.html"%>
+ <%} %>
+
+
+
+
+
+
+
+
+
+
+
+
+