r887 - in trunk: echobase-domain/src/main/java/fr/ifremer/echobase/entities echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors echobase-ui/src/main/resources echobase-ui/src/main/resources/config echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery echobase-ui/src/main/resources/i18n echobase-ui/src/main/webap
Author: tchemit Date: 2013-11-09 19:18:09 +0100 (Sat, 09 Nov 2013) New Revision: 887 Url: http://forge.codelutin.com/projects/echobase/repository/revisions/887 Log: fixes #3680: Pb export des donn?\195?\169es echobase Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/AbstractEditExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ConfirmDeleteExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CreateNewExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DeleteExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/EditExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ShowExportQuery.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery-validation.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery-validation.xml Removed: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ExportQueryDAOImpl.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties trunk/echobase-ui/src/main/resources/struts.xml trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQuery.jsp Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ExportQueryDAOImpl.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ExportQueryDAOImpl.java 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/entities/ExportQueryDAOImpl.java 2013-11-09 18:18:09 UTC (rev 887) @@ -23,29 +23,30 @@ * #L% */ -import com.google.common.collect.Lists; -import org.apache.commons.lang3.StringUtils; import org.nuiton.topia.TopiaException; -import java.util.List; - public class ExportQueryDAOImpl<E extends ExportQuery> extends ExportQueryDAOAbstract<E> { - public boolean isQueryExists(String id, String queryName) throws TopiaException { + public boolean isQueryExists(String queryName) throws TopiaException { String hql = "SELECT COUNT(*)" + " FROM " + getTopiaEntityEnum().getImplementationFQN() + " WHERE " + ExportQuery.PROPERTY_NAME + " = :name"; - List<Object> params = Lists.<Object>newArrayList("name", queryName); + boolean result = existsByQuery(hql, new String[]{"name", queryName}); + return result; + } - if (StringUtils.isNotBlank(id)) { - hql += " AND " + ExportQuery.PROPERTY_TOPIA_ID + " = :id"; - params.add("id"); - params.add(id); - } + public boolean isQueryExists(String id, String queryName) throws TopiaException { - boolean result = existsByQuery(hql, params.toArray()); + String hql = "SELECT COUNT(*)" + + " FROM " + getTopiaEntityEnum().getImplementationFQN() + + " WHERE " + ExportQuery.PROPERTY_NAME + " = :name" + + " AND " + ExportQuery.PROPERTY_TOPIA_ID + " != :id"; + + boolean result = existsByQuery( + hql, + new String[]{"name", queryName, "id", id}); return result; } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/exportquery/ExportQueryService.java 2013-11-09 18:18:09 UTC (rev 887) @@ -65,6 +65,27 @@ } + public boolean isQueryNameValid(ExportQuery exportQuery) { + String queryName = exportQuery.getName(); + boolean result = ExportQueries.isQueryNameValid(queryName); + return result; + } + + public boolean isQueryNameAvailable(ExportQuery exportQuery) { + String queryName = exportQuery.getName(); + String id = exportQuery.getTopiaId(); + boolean mustCreate = StringUtils.isEmpty(id); + + boolean result; + if (mustCreate) { + + result = !getDAO().isQueryExists(queryName); + } else { + result = !getDAO().isQueryExists(id, queryName); + } + return result; + } + public ExportQuery createOrUpdate(ExportQuery exportQuery, EchoBaseUser user) throws ExportQueryNameAlreadyExistException, ExportQueryInvalidNameException { try { @@ -78,20 +99,15 @@ String queryName = exportQuery.getName(); - if (!ExportQueries.isQueryNameValid(queryName)) { + if (!isQueryNameValid(exportQuery)) { // can not accept a non alpha numeric name throw new ExportQueryInvalidNameException(); } // check query does not already exists with this name - if (mustCreate) { - - boolean queryExists = dao.isQueryExists(id, queryName); - - if (queryExists) { - throw new ExportQueryNameAlreadyExistException(); - } + if (!isQueryNameAvailable(exportQuery)) { + throw new ExportQueryNameAlreadyExistException(); } ExportQuery entityToSave; @@ -158,11 +174,11 @@ String safeSql = getSafeSql(sql); GenericSQLQuery sqlQuery = new GenericSQLQuery(safeSql, null); - getEchoBaseInternalPersistenceContext().findSingleResult(sqlQuery); + getEchoBasePersistenceContext().findSingleResult(sqlQuery); sqlQuery.getColumnNames(); } - public Map<String, Object>[] executeExportquery(String queryId, + public Map<String, Object>[] executeExportQuery(String queryId, TopiaPagerBean pager) throws ExportQueryNotFoundException { String sql = getSqlQuery(queryId); @@ -171,7 +187,7 @@ GenericSQLQuery sqlQuery = new GenericSQLQuery(sql, pager); try { List<Map<String, Object>> result = - getEchoBaseInternalPersistenceContext().findMultipleResult(sqlQuery); + getEchoBasePersistenceContext().findMultipleResult(sqlQuery); return result.toArray(new Map[result.size()]); } catch (TopiaException eee) { throw new EchoBaseTechnicalException( @@ -190,7 +206,7 @@ // do a limit query to one result and obtain the column names // from the meta data of the result set GenericSQLQuery sqlQuery = new GenericSQLQuery(limitSql, null); - getEchoBaseInternalPersistenceContext().findSingleResult(sqlQuery); + getEchoBasePersistenceContext().findSingleResult(sqlQuery); String[] result = sqlQuery.getColumnNames(); return result; } catch (TopiaException eee) { @@ -209,7 +225,7 @@ GenericSQLQuery sqlQuery = new GenericSQLQuery(sql, null); List<Map<String, Object>> rows; try { - rows = getEchoBaseInternalPersistenceContext().findMultipleResult(sqlQuery); + rows = getEchoBasePersistenceContext().findMultipleResult(sqlQuery); } catch (TopiaException eee) { throw new EchoBaseTechnicalException( "Could not execute sql query", eee); Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/AbstractEditExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/AbstractEditExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/AbstractEditExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,133 @@ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +/** + * To save a export query. + * <p/> + * Created on 11/9/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.5 + */ +public abstract class AbstractEditExportQuery extends EchoBaseActionSupport { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(AbstractEditExportQuery.class); + + private static final long serialVersionUID = 1L; + + /** Selected query loaded from database if his id is not empty. */ + protected ExportQuery query; + + public ExportQuery getQuery() { + if (query == null) { + query = exportQueryService.newExportQuery(); + } + return query; + } + + protected boolean canUpdateQuery; + + protected boolean queryExist; + + public boolean isCanUpdateQuery() { + return canUpdateQuery; + } + + public boolean isQueryExists() { + return StringUtils.isNotEmpty(getQuery().getTopiaId()); + } + + public boolean isNewQuery() { + return !isQueryExists(); + } + + /** All available queries from database. */ + protected Map<String, String> queries; + + public Map<String, String> getQueries() { + return queries; + } + + @Override + public String input() throws Exception { + + // come back here when validation failed + queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); + + EchoBaseUser echoBaseUser = getEchoBaseSession().getUser(); + + canUpdateQuery = echoBaseUser.isAdmin() || + echoBaseUser.getEmail().equals( + query.getLastModifiedUser()); + + if (isNewQuery()) { + + // new query in progress + addFlashMessage(_("echobase.info.new.sqlQuery.inprogress")); + } + return INPUT; + } + + @Override + public String execute() throws Exception { + + query = exportQueryService.createOrUpdate( + getQuery(), getEchoBaseSession().getUser()); + + return SUCCESS; + } + + @Override + public void validate() { + super.validate(); + if (!hasFieldErrors()) { + if (!exportQueryService.isQueryNameValid(getQuery())) { + addFieldError("query.name", + _("echobase.error.query.invalid.name")); + } else if (!exportQueryService.isQueryNameAvailable(getQuery())) { + addFieldError("query.name", + _("echobase.error.query.name.already.exists")); + } else { + try { + exportQueryService.testSql(getQuery().getSqlQuery()); + } catch (Exception e) { + Throwable cause = e.getCause(); + if (log.isWarnEnabled()) { + log.warn("Invalid sql ", cause); + } + addFieldError("query.sqlQuery", + _("echobase.error.invalid.sql", cause.getMessage())); + } + } + } + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + + protected transient InternalDbPersistenceService internalDbPersistenceService; + + public void setInternalDbPersistenceService(InternalDbPersistenceService internalDbPersistenceService) { + this.internalDbPersistenceService = internalDbPersistenceService; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/AbstractEditExportQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,48 @@ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import com.opensymphony.xwork2.interceptor.annotations.InputConfig; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To clone an export query. + * <p/> + * Created on 11/9/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.5 + */ +public class CloneExportQuery extends AbstractEditExportQuery { + + /** Logger. */ + private static final Log log = LogFactory.getLog(CloneExportQuery.class); + + private static final long serialVersionUID = 1L; + + @Override + public void validate() { + + // remove his id + query.setTopiaId(null); + + // rename it + query.setName(getQuery().getName() + "-clone"); + super.validate(); + } + + @InputConfig(methodName = INPUT) + @Override + public String execute() throws Exception { + + String selectedQueryId = getQuery().getTopiaId(); + + if (log.isInfoEnabled()) { + log.info("Will clone query: " + selectedQueryId); + } + + String result = super.execute(); + addFlashMessage(_("echobase.info.query.cloned")); + return result; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ConfirmDeleteExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ConfirmDeleteExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ConfirmDeleteExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,59 @@ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To confirm delete an export query. + * <p/> + * Created on 11/9/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.5 + */ +public class ConfirmDeleteExportQuery extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = + LogFactory.getLog(ConfirmDeleteExportQuery.class); + + /** Selected query loaded from database if his id is not empty. */ + protected ExportQuery query; + + public ExportQuery getQuery() { + if (query == null) { + query = exportQueryService.newExportQuery(); + } + return query; + } + + @Override + public String execute() throws Exception { + + String selectedQueryId = getQuery().getTopiaId(); + + if (log.isInfoEnabled()) { + log.info("Will confirm to delete query: " + selectedQueryId); + } + + // get query + query = exportQueryService.getExportQuery(selectedQueryId); + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ConfirmDeleteExportQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CreateNewExportQuery.java (from rev 886, trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java) =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CreateNewExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/CreateNewExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,108 @@ +/* + * #%L + * EchoBase :: UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program 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. + * + * This program 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 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 <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryNotFoundException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +/** + * To create a new {@link ExportQuery}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class CreateNewExportQuery extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(CreateNewExportQuery.class); + + /** Selected query loaded from database if his id is not empty. */ + protected ExportQuery query; + + public ExportQuery getQuery() { + if (query == null) { + query = exportQueryService.newExportQuery(); + } + return query; + } + + public boolean isNewQuery() { + return true; + } + + public boolean isQueryExists() { + return false; + } + + public boolean isCanUpdateQuery() { + return false; + } + + /** All available queries from database. */ + protected Map<String, String> queries; + + public Map<String, String> getQueries() { + return queries; + } + + @Override + public String execute() throws ExportQueryNotFoundException { + + if (log.isInfoEnabled()) { + log.info("Will create a new query"); + } + + queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); + + // new query in progress + addFlashMessage(_("echobase.info.new.sqlQuery.inprogress")); + + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + + protected transient InternalDbPersistenceService internalDbPersistenceService; + + public void setInternalDbPersistenceService(InternalDbPersistenceService internalDbPersistenceService) { + this.internalDbPersistenceService = internalDbPersistenceService; + } +} \ No newline at end of file Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DeleteExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DeleteExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DeleteExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,57 @@ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To delete an export query. + * <p/> + * Created on 11/9/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.5 + */ +public class DeleteExportQuery extends EchoBaseActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DeleteExportQuery.class); + + private static final long serialVersionUID = 1L; + + /** Selected query loaded from database if his id is not empty. */ + protected ExportQuery query; + + public ExportQuery getQuery() { + if (query == null) { + query = exportQueryService.newExportQuery(); + } + return query; + } + + @Override + public String execute() throws Exception { + + //TODO : do validation + if (log.isInfoEnabled()) { + log.info("Will delete query: " + getQuery().getTopiaId()); + } + exportQueryService.delete(getQuery().getTopiaId()); + query = null; + addFlashMessage(_("echobase.info.query.removed")); + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/DeleteExportQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Copied: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/EditExportQuery.java (from rev 886, trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java) =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/EditExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/EditExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,145 @@ +/* + * #%L + * EchoBase :: UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program 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. + * + * This program 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 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 <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryNotFoundException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +/** + * To edit a {@link ExportQuery}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class EditExportQuery extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(EditExportQuery.class); + + /** Selected query loaded from database if his id is not empty. */ + protected ExportQuery query; + + public ExportQuery getQuery() { + if (query == null) { + query = exportQueryService.newExportQuery(); + } + return query; + } + + public boolean isNewQuery() { + return false; + } + + public boolean isQueryExists() { + return StringUtils.isNotEmpty(getQuery().getTopiaId()); + } + + protected boolean canUpdateQuery; + + public boolean isCanUpdateQuery() { + return canUpdateQuery; + } + + /** All available queries from database. */ + protected Map<String, String> queries; + + public Map<String, String> getQueries() { + return queries; + } + + @Override + public String execute() throws ExportQueryNotFoundException { + + queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); + + String selectedQueryId = getQuery().getTopiaId(); + + + // load query from database + query = exportQueryService.getExportQuery(selectedQueryId); + + EchoBaseUser echoBaseUser = + getEchoBaseSession().getUser(); + canUpdateQuery = echoBaseUser.isAdmin() || + echoBaseUser.getEmail().equals( + query.getLastModifiedUser()); + + if (!canUpdateQuery) { + + // this user can not update selected query + addFlashMessage( + _("echobase.info.sqlQuery.not.modifiable")); + } + + // test query + checkQuery(); + + return SUCCESS; + } + + private boolean checkQuery() { + + boolean result; + try { + exportQueryService.testSql(getQuery().getSqlQuery()); + result = true; + } catch (Exception e) { + Throwable cause = e.getCause(); + if (log.isWarnEnabled()) { + log.warn("Invalid sql ", cause); + } + addFieldError("query.sqlQuery", + _("echobase.error.invalid.sql", cause.getMessage())); + result = false; + } + return result; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + + protected transient ExportQueryService exportQueryService; + + public void setExportQueryService(ExportQueryService exportQueryService) { + this.exportQueryService = exportQueryService; + } + + protected transient InternalDbPersistenceService internalDbPersistenceService; + + public void setInternalDbPersistenceService(InternalDbPersistenceService internalDbPersistenceService) { + this.internalDbPersistenceService = internalDbPersistenceService; + } +} \ No newline at end of file Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/GetExportQueryResult.java 2013-11-09 18:18:09 UTC (rev 887) @@ -61,7 +61,7 @@ @Override public String execute() throws Exception { - datas = exportQueryService.executeExportquery(queryId, pager); + datas = exportQueryService.executeExportQuery(queryId, pager); return SUCCESS; } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -23,12 +23,10 @@ */ package fr.ifremer.echobase.ui.actions.exportQuery; -import com.opensymphony.xwork2.Preparable; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.ExportQuery; import fr.ifremer.echobase.services.service.InternalDbPersistenceService; -import fr.ifremer.echobase.services.service.exportquery.ExportQueryInvalidNameException; -import fr.ifremer.echobase.services.service.exportquery.ExportQueryNameAlreadyExistException; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryNotFoundException; import fr.ifremer.echobase.services.service.exportquery.ExportQueryService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; import org.apache.commons.lang3.StringUtils; @@ -43,7 +41,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class ManageExportQuery extends EchoBaseActionSupport implements Preparable { +public class ManageExportQuery extends EchoBaseActionSupport {//implements Preparable { private static final long serialVersionUID = 1L; @@ -60,28 +58,16 @@ return query; } - protected boolean newQuery; +// protected boolean newQuery; +// +// public void setNewQuery(boolean newQuery) { +// this.newQuery = newQuery; +// } - public void setNewQuery(boolean newQuery) { - this.newQuery = newQuery; - } - public boolean isNewQuery() { - return newQuery; + return false; } - protected boolean newLibreOfficeQuery; - - public void setNewLibreOfficeQuery(boolean newLibreOfficeQuery) { - this.newLibreOfficeQuery = newLibreOfficeQuery; - } - - public boolean isNewLibreOfficeQuery() { - return newLibreOfficeQuery; - } - - protected boolean queryExists; - public boolean isQueryExists() { return StringUtils.isNotEmpty(getQuery().getTopiaId()); } @@ -103,66 +89,9 @@ return queries; } - public String saveQuery() throws Exception { - - String result = INPUT; - - boolean safeSql = checkQuery(); - - if (safeSql) { - try { - query = exportQueryService.createOrUpdate( - getQuery(), getEchoBaseSession().getUser()); - - result = SUCCESS; - } catch (ExportQueryInvalidNameException e) { - addFieldError("query.name", - _("echobase.error.query.invalid.name")); - } catch (ExportQueryNameAlreadyExistException e) { - addFieldError("query.name", - _("echobase.error.query.name.already.exists")); - } - } - return result; - } - - public String cloneQuery() throws Exception { - - getQuery().setTopiaId(null); - getQuery().setName(getQuery().getName() + "-clone"); - query = exportQueryService.createOrUpdate(getQuery(), - getEchoBaseSession().getUser() - ); - return SUCCESS; - } - - public String confirmDeleteQuery() throws Exception { - - return SUCCESS; - } - - public String deleteQuery() throws Exception { - - //TODO : do validation - exportQueryService.delete(getQuery().getTopiaId()); - query = null; - return SUCCESS; - } - @Override - public String execute() { + public String execute() throws ExportQueryNotFoundException { - if (StringUtils.isNotEmpty(getQuery().getTopiaId())) { - - // test query - checkQuery(); - } - return SUCCESS; - } - - @Override - public void prepare() throws Exception { - queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); if (queries.isEmpty()) { @@ -175,15 +104,18 @@ if (!isQueryExists()) { - if (isNewQuery() || isNewLibreOfficeQuery()) { + // no query selected + addFlashMessage(_("echobase.info.no.sqlQuery.selected")); - // new query in progress - addFlashMessage(_("echobase.info.new.sqlQuery.inprogress")); - } else { - - // no query selected - addFlashMessage(_("echobase.info.no.sqlQuery.selected")); - } +// if (isNewQuery()) { +// +// // new query in progress +// addFlashMessage(_("echobase.info.new.sqlQuery.inprogress")); +// } else { +// +// // no query selected +// addFlashMessage(_("echobase.info.no.sqlQuery.selected")); +// } } else { // load query from database @@ -203,8 +135,60 @@ } } } + + if (isQueryExists()) { + + // test query + checkQuery(); + } + return SUCCESS; } +// @Override +// public void prepare() throws Exception { +// +// queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); +// +// if (queries.isEmpty()) { +// +// // no query saved +// addFlashMessage(_("echobase.info.no.sqlQuery.saved")); +// } else { +// +// String selectedQueryId = getQuery().getTopiaId(); +// +// if (!isQueryExists()) { +// +// if (isNewQuery() || isNewLibreOfficeQuery()) { +// +// // new query in progress +// addFlashMessage(_("echobase.info.new.sqlQuery.inprogress")); +// } else { +// +// // no query selected +// addFlashMessage(_("echobase.info.no.sqlQuery.selected")); +// } +// } else { +// +// // load query from database +// query = exportQueryService.getExportQuery(selectedQueryId); +// +// EchoBaseUser echoBaseUser = +// getEchoBaseSession().getUser(); +// canUpdateQuery = echoBaseUser.isAdmin() || +// echoBaseUser.getEmail().equals( +// query.getLastModifiedUser()); +// +// if (!canUpdateQuery) { +// +// // this user can not update selected query +// addFlashMessage( +// _("echobase.info.sqlQuery.not.modifiable")); +// } +// } +// } +// } + private boolean checkQuery() { boolean result; Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,45 @@ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import com.opensymphony.xwork2.interceptor.annotations.InputConfig; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To save a query. + * <p/> + * Created on 11/9/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.5 + */ +public class SaveExportQuery extends AbstractEditExportQuery { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SaveExportQuery.class); + + private static final long serialVersionUID = 1L; + + @InputConfig(methodName = INPUT) + @Override + public String execute() throws Exception { + + boolean newQuery = isNewQuery(); + if (log.isInfoEnabled()) { + if (newQuery) { + + log.info("Will create query: " + getQuery().getName()); + } else { + log.info("Will save query with id: " + getQuery().getTopiaId()); + } + } + + String result = super.execute(); + if (newQuery) { + addFlashMessage(_("echobase.info.query.created")); + } else { + addFlashMessage(_("echobase.info.query.saved")); + } + return result; + } + +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ShowExportQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ShowExportQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ShowExportQuery.java 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,110 @@ +/* + * #%L + * EchoBase :: UI + * + * $Id$ + * $HeadURL: http://svn.forge.codelutin.com/svn/echobase/trunk/echobase-ui/src/main/java/... $ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program 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. + * + * This program 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 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 <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.ui.actions.exportQuery; + +import fr.ifremer.echobase.entities.ExportQuery; +import fr.ifremer.echobase.entities.ExportQueryImpl; +import fr.ifremer.echobase.services.service.InternalDbPersistenceService; +import fr.ifremer.echobase.services.service.exportquery.ExportQueryNotFoundException; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; + +/** + * To show all {@link ExportQuery}. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public class ShowExportQuery extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(ShowExportQuery.class); + + /** Selected query loaded from database if his id is not empty. */ + protected final ExportQuery query = new ExportQueryImpl(); + + public ExportQuery getQuery() { +// if (query == null) { +// query = exportQueryService.newExportQuery(); +// } + return query; + } + + public boolean isNewQuery() { + return false; + } + + public boolean isQueryExists() { + return false; + } + + public boolean isCanUpdateQuery() { + return false; + } + + /** All available queries from database. */ + protected Map<String, String> queries; + + public Map<String, String> getQueries() { + return queries; + } + + @Override + public String execute() throws ExportQueryNotFoundException { + + if (log.isInfoEnabled()) { + log.info("Will show all queries"); + } + + queries = internalDbPersistenceService.loadSortAndDecorate(ExportQuery.class); + + if (queries.isEmpty()) { + + // no query saved + addFlashMessage(_("echobase.info.no.sqlQuery.saved")); + } + return SUCCESS; + } + + //------------------------------------------------------------------------// + //-- Injected objects // + //------------------------------------------------------------------------// + +// protected transient ExportQueryService exportQueryService; +// +// public void setExportQueryService(ExportQueryService exportQueryService) { +// this.exportQueryService = exportQueryService; +// } + + protected transient InternalDbPersistenceService internalDbPersistenceService; + + public void setInternalDbPersistenceService(InternalDbPersistenceService internalDbPersistenceService) { + this.internalDbPersistenceService = internalDbPersistenceService; + } +} \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ShowExportQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/interceptors/EchoBaseInjectInterceptor.java 2013-11-09 18:18:09 UTC (rev 887) @@ -112,24 +112,8 @@ } } - - try { - - return invocation.invoke(); - - } finally { - - // serviceContext.getPersistenceContext().getEntityTransaction().rollback(); - - } - - } else { - - // not an action, just process - - return invocation.invoke(); - } + return invocation.invoke(); } @@ -138,14 +122,6 @@ EchoBaseSession session = EchoBaseSession.getEchoBaseSession( invocation.getInvocationContext()); -// if (session == null) { -// -// session = new EchoBaseSession(); -// -// invocation.getInvocationContext().getSession().put(EchoBaseSession.SESSION_PARAMETER, session); -// -// } - return session; } Modified: trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml 2013-11-09 18:18:09 UTC (rev 887) @@ -29,13 +29,19 @@ <struts> - <package name="exportQuery" extends="logguedAndWithDb" namespace="/exportQuery"> + <package name="exportQuery" extends="logguedAndWithDb" + namespace="/exportQuery"> <result-types> - <result-type name="redirectExportQuery" + <result-type name="redirectToList" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"> - <param name="actionName">manageExportQuery</param> - <param name="namespace">export</param> + <param name="actionName">list</param> + <param name="namespace">exportQuery</param> + </result-type> + <result-type name="redirectToEdit" + class="org.apache.struts2.dispatcher.ServletActionRedirectResult"> + <param name="actionName">edit</param> + <param name="namespace">exportQuery</param> <param name="query.topiaId">${query.topiaId}</param> </result-type> <result-type name="showList" @@ -46,23 +52,25 @@ </result-types> - <interceptors> - <!-- authenticated stack with params - prepare - params --> - <interceptor-stack name="paramsPrepareParamsStackLogguedWithDb"> - <interceptor-ref name="i18n"/> - <interceptor-ref name="checkUserLoggued"/> - <interceptor-ref name="checkWorkingDbSelected"/> - <interceptor-ref name="paramsPrepareParamsStack"/> - </interceptor-stack> - </interceptors> - <!-- Display export query main page --> - <action name="manageExportQuery" - class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> - <interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/> + <action name="list" + class="fr.ifremer.echobase.ui.actions.exportQuery.ShowExportQuery"> + <!--<interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/>--> <result type="showList"/> </action> + <!-- Edit a query --> + <action name="edit" + class="fr.ifremer.echobase.ui.actions.exportQuery.EditExportQuery"> + <result type="showList"/> + </action> + + <!-- To create a new query --> + <action name="create" + class="fr.ifremer.echobase.ui.actions.exportQuery.CreateNewExportQuery"> + <result type="showList"/> + </action> + <!-- Display the result of the export query execution --> <action name="exportQueryResult" class="fr.ifremer.echobase.ui.actions.exportQuery.ExportQueryResult"> @@ -84,40 +92,37 @@ </action> <!-- Clone the export query --> - <action name="clone" method="cloneQuery" - class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> - <interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/> + <action name="clone" + class="fr.ifremer.echobase.ui.actions.exportQuery.CloneExportQuery"> + <interceptor-ref name="prepareParamsStackLogguedWithDb"/> <result name="input" type="showList"/> - <result type="redirectExportQuery"/> + <result type="redirectToEdit"/> </action> <!-- Save the export query --> - <action name="save" method="saveQuery" - class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> - <interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/> + <action name="save" + class="fr.ifremer.echobase.ui.actions.exportQuery.SaveExportQuery"> + <interceptor-ref name="prepareParamsStackLogguedWithDb"/> <result name="input" type="showList"/> - <result type="redirectExportQuery"/> + <result type="redirectToEdit"/> </action> <!-- Confirm to delete the export query --> - <action name="confirmDelete" method="confirmDeleteQuery" - class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> - <interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/> + <action name="confirmDelete" + class="fr.ifremer.echobase.ui.actions.exportQuery.ConfirmDeleteExportQuery"> <result>/WEB-INF/jsp/exportQuery/confirmDelete.jsp</result> </action> <!-- Delete the export query --> - <action name="delete" method="deleteQuery" - class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> - <interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/> - <result name="input" type="showList"/> - <result type="redirectExportQuery"/> + <action name="delete" + class="fr.ifremer.echobase.ui.actions.exportQuery.DeleteExportQuery"> + <result type="redirectToList"/> </action> <!-- Download the sql query csv file --> <action name="downloadExportQueryResult" class="fr.ifremer.echobase.ui.actions.exportQuery.DownloadExportQueryResult"> - <interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/> + <!--<interceptor-ref name="paramsPrepareParamsStackLogguedWithDb"/>--> <result type="stream"> <param name="contentType">${contentType}</param> <param name="contentLength">${contentLength}</param> Copied: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery-validation.xml (from rev 886, trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml) =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/CloneExportQuery-validation.xml 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,79 @@ +<!-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program 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. + + This program 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 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 <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="query.name"> + + <field-validator type="requiredstring"> + <message key="echobase.error.export.name.requiredstring"/> + </field-validator> + </field> + + <field name="query.description"> + + <field-validator type="requiredstring"> + <message key="echobase.error.export.description.requiredstring"/> + </field-validator> + </field> + + <field name="query.sqlQuery"> + + <field-validator type="requiredstring" short-circuit="true"> + <message key="echobase.error.export.sqlQuery.requiredstring"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("insert")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.insert.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("update")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.update.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("delete")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.delete.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("drop")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.drop.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("alter")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.alter.word"/> + </field-validator> + </field> + +</validators> \ No newline at end of file Deleted: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml 2013-11-09 18:18:09 UTC (rev 887) @@ -1,49 +0,0 @@ -<!-- - #%L - EchoBase :: UI - - $Id$ - $HeadURL$ - %% - Copyright (C) 2011 Ifremer, Codelutin - %% - This program 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. - - This program 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 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 <http://www.gnu.org/licenses/>. - #L% - --> -<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" - "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> -<validators> - - <field name="query.name"> - - <field-validator type="requiredstring"> - <message key="echobase.error.export.name.requiredstring"/> - </field-validator> - </field> - - <field name="query.description"> - - <field-validator type="requiredstring"> - <message key="echobase.error.export.description.requiredstring"/> - </field-validator> - </field> - - <field name="query.sqlQuery"> - - <field-validator type="requiredstring"> - <message key="echobase.error.export.sqlQuery.requiredstring"/> - </field-validator> - </field> - -</validators> \ No newline at end of file Deleted: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml 2013-11-09 18:18:09 UTC (rev 887) @@ -1,80 +0,0 @@ -<!-- - #%L - EchoBase :: UI - - $Id$ - $HeadURL$ - %% - Copyright (C) 2011 Ifremer, Codelutin - %% - This program 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. - - This program 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 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 <http://www.gnu.org/licenses/>. - #L% - --> -<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" - "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> -<validators> - - <field name="query.name"> - - <field-validator type="requiredstring"> - <message key="echobase.error.export.name.requiredstring"/> - </field-validator> - </field> - - <field name="query.description"> - - <field-validator type="requiredstring"> - <message key="echobase.error.export.description.requiredstring"/> - </field-validator> - </field> - - <field name="query.sqlQuery"> - - <field-validator type="requiredstring" short-circuit="true"> - <message key="echobase.error.export.sqlQuery.requiredstring"/> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[!query.sqlQuery.toLowerCase().contains("insert")]]></param> - <message key="echobase.error.export.sqlQuery.forbidden.insert.word"/> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[!query.sqlQuery.toLowerCase().contains("update")]]></param> - <message key="echobase.error.export.sqlQuery.forbidden.update.word"/> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[!query.sqlQuery.toLowerCase().contains("delete")]]></param> - <message key="echobase.error.export.sqlQuery.forbidden.delete.word"/> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[!query.sqlQuery.toLowerCase().contains("drop")]]></param> - <message key="echobase.error.export.sqlQuery.forbidden.drop.word"/> - </field-validator> - - <field-validator type="fieldexpression" short-circuit="true"> - <param name="expression"> - <![CDATA[!query.sqlQuery.toLowerCase().contains("alter")]]></param> - <message key="echobase.error.export.sqlQuery.forbidden.alter.word"/> - </field-validator> - - </field> - -</validators> \ No newline at end of file Copied: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery-validation.xml (from rev 886, trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml) =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery-validation.xml (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/SaveExportQuery-validation.xml 2013-11-09 18:18:09 UTC (rev 887) @@ -0,0 +1,80 @@ +<!-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 Ifremer, Codelutin + %% + This program 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. + + This program 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 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 <http://www.gnu.org/licenses/>. + #L% + --> +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="query.name"> + + <field-validator type="requiredstring"> + <message key="echobase.error.export.name.requiredstring"/> + </field-validator> + </field> + + <field name="query.description"> + + <field-validator type="requiredstring"> + <message key="echobase.error.export.description.requiredstring"/> + </field-validator> + </field> + + <field name="query.sqlQuery"> + + <field-validator type="requiredstring" short-circuit="true"> + <message key="echobase.error.export.sqlQuery.requiredstring"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("insert")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.insert.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("update")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.update.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("delete")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.delete.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("drop")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.drop.word"/> + </field-validator> + + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[!query.sqlQuery.toLowerCase().contains("alter")]]></param> + <message key="echobase.error.export.sqlQuery.forbidden.alter.word"/> + </field-validator> + + </field> + +</validators> \ No newline at end of file Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2013-11-09 18:18:09 UTC (rev 887) @@ -266,6 +266,10 @@ echobase.info.no.workingDb.selected=No working database selected echobase.info.no.workingDbConfiguration.saved=No working database configuration saved echobase.info.no.workingDbConfiguration.selected=Select a working database configuration and then connect +echobase.info.query.cloned= +echobase.info.query.created= +echobase.info.query.removed= +echobase.info.query.saved= echobase.info.removeData.failed=Import removal failed echobase.info.removeData.succeded=Successful data import removal echobase.info.reportBug=Bug report Modified: trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties =================================================================== --- trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2013-11-09 18:18:09 UTC (rev 887) @@ -266,6 +266,10 @@ echobase.info.no.workingDb.selected=Aucune base de travail sélectionnée echobase.info.no.workingDbConfiguration.saved=Aucune configuration de base de travail enregistrée echobase.info.no.workingDbConfiguration.selected=Sélectionner une configuration pour ensuite vous y connecter +echobase.info.query.cloned=Requête dupliquée +echobase.info.query.created=Requête créée +echobase.info.query.removed=Requête supprimée +echobase.info.query.saved=Requête mise à jour echobase.info.removeData.failed=La suppresion de l'import a échoué echobase.info.removeData.succeded=La suppresion de l'import a réussi echobase.info.reportBug=Rapport de bug Modified: trunk/echobase-ui/src/main/resources/struts.xml =================================================================== --- trunk/echobase-ui/src/main/resources/struts.xml 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/resources/struts.xml 2013-11-09 18:18:09 UTC (rev 887) @@ -35,8 +35,7 @@ name="default" /> <bean class="org.nuiton.web.struts2.I18nTextProvider" - name="i18nTextProvider" - type="com.opensymphony.xwork2.TextProvider"/> + name="i18nTextProvider" type="com.opensymphony.xwork2.TextProvider"/> <!-- dev mode tuning --> <constant name="struts.devMode" value="${devMode}"/> @@ -152,6 +151,35 @@ <interceptor-ref name="debugging"/> </interceptor-stack> + <!--interceptor-stack name="echobaseParamsPrepareParamsStack"> + <interceptor-ref name="exception"/> + <interceptor-ref name="alias"/> + <interceptor-ref name="i18n"/> + <interceptor-ref name="checkbox"/> + <interceptor-ref name="multiselect"/> + <interceptor-ref name="echobaseInjector"/> + <interceptor-ref name="params"> + <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param> + </interceptor-ref> + <interceptor-ref name="servletConfig"/> + <interceptor-ref name="prepare"/> + <interceptor-ref name="chain"/> + <interceptor-ref name="modelDriven"/> + <interceptor-ref name="fileUpload"/> + <interceptor-ref name="staticParams"/> + <interceptor-ref name="actionMappingParams"/> + <interceptor-ref name="params"> + <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param> + </interceptor-ref> + <interceptor-ref name="conversionError"/> + <interceptor-ref name="validation"> + <param name="excludeMethods">input,back,cancel,browse</param> + </interceptor-ref> + <interceptor-ref name="workflow"> + <param name="excludeMethods">input,back,cancel,browse</param> + </interceptor-ref> + </interceptor-stack--> + </interceptors> <!-- default action to use everywhere (fix i18n when not translated) --> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2013-11-09 18:18:09 UTC (rev 887) @@ -102,7 +102,7 @@ <span><s:text name="echobase.menu.importData"/></s:a></span> </li> <li> - <s:a action="manageExportQuery" namespace="/exportQuery" + <s:a action="list" namespace="/exportQuery" cssClass="expDonnee"> <span><s:text name="echobase.menu.export"/></span> </s:a> @@ -159,7 +159,7 @@ <s:else> <s:if test="#session.echoBaseSession.workingDbSelected"> <li> - <s:a action="manageExportQuery" namespace="/exportQuery" + <s:a action="list" namespace="/exportQuery" cssClass="expDonnee"> <span><s:text name="echobase.menu.export"/></span> </s:a> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQuery.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQuery.jsp 2013-11-04 07:59:04 UTC (rev 886) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQuery.jsp 2013-11-09 18:18:09 UTC (rev 887) @@ -29,33 +29,29 @@ <script type="text/javascript"> - function reloadPage(params) { - var url = "<s:url action='manageExportQuery' namespace='/exportQuery'/>?"; - window.location = url + $.param(params); - return false; - } + function reloadPage(id) { + if (!!!id) { - function newQuery(newParam) { - if (<s:property value="%{queryExists or (!newQuery and !newLibreOfficeQuery)}"/>) { - var params = {}; - params[newParam] = true; - reloadPage(params); + // no edit (show list) + window.location = "<s:url action='list' namespace='/exportQuery'/>"; } else { - $('[name="query.topiaId"]').val(''); - $('[name="query.name"]').val(''); - $('[name="query.description"]').val(''); - $('[name="query.sqlQuery"]').val(''); - if (newParam=='newLibreOfficeQuery') { - openNewLibreOfficeDialog(); - } + + // edit query + window.location = "<s:url action='edit' namespace='/exportQuery'/>?" + $.param({'query.topiaId': id}); } return false; } - function reloadQuery() { - return reloadPage({'query.topiaId':'<s:property value="query.topiaId"/>'}); + function newQuery() { + window.location = "<s:url action='create' namespace='/exportQuery'/>"; + return false; } + // function reloadQuery() { + <%--return reloadPage('<s:property value="query.topiaId"/>');--%> + // } + + <s:if test="%{queryExists}"> function openNewLibreOfficeDialog() { var dialog = $("#newLibreOfficeDialog"); var url = "<s:url action='newLibreOfficeQuery' namespace='/exportQuery' method="input"/>"; @@ -65,14 +61,16 @@ return false; } - function confirmDeleteQuery() { - var url = "<s:url action='confirmDelete' namespace='/exportQuery'/>?" + - $.param({ 'query.topiaId':'<s:property value="query.topiaId"/>'}); + function openConfirmDeleteQueryDialog() { var dialog = $("#confirmDeleteDialog"); + var url = "<s:url action='confirmDelete' namespace='/exportQuery'/>?" + + $.param({ 'query.topiaId': '<s:property value="query.topiaId"/>'}); + dialog.html(""); dialog.load(url); dialog.dialog('open'); return false; } + </s:if> </script> <title><s:text name="echobase.title.export"/></title> @@ -81,7 +79,7 @@ <ul class="toolbar floatLeft"> <li> - <s:submit onclick="return newQuery('newQuery');" theme="simple" + <s:submit onclick="return newQuery();" theme="simple" key="echobase.action.newQuery"/> </li> </ul> @@ -93,7 +91,7 @@ list="queries" headerKey="" headerValue="" theme="simple"/> </fieldset> - <s:if test="%{!#noError or queryExists or newQuery or newLibreOfficeQuery}"> + <s:if test="%{!#noError or queryExists or newQuery}"> <fieldset> <legend><s:text name="echobase.legend.sqlQuery.configuration"/></legend> @@ -101,7 +99,8 @@ readonly="%{queryExists and !canUpdateQuery}" label="%{getText('echobase.label.query.name')}"/> - <s:textarea key="query.description" requiredLabel="true" cols="160" rows="2" + <s:textarea key="query.description" requiredLabel="true" cols="160" + rows="2" readonly="%{queryExists and !canUpdateQuery}" label="%{getText('echobase.label.query.description')}"/> @@ -124,8 +123,8 @@ </li> <s:if test="queryExists"> <li> - <s:submit onclick="return reloadQuery();" theme="simple" - key="echobase.action.reloadSqlQuery"/> + <s:submit onclick="return reloadPage('%{query.topiaId}');" + theme="simple" key="echobase.action.reloadSqlQuery"/> </li> <li> <s:submit action="clone" theme="simple" @@ -133,8 +132,8 @@ </li> <s:if test="canUpdateQuery"> <li> - <s:submit onclick="return confirmDeleteQuery();" theme="simple" - key="echobase.action.delete"/> + <s:submit onclick="return openConfirmDeleteQueryDialog();" + theme="simple" key="echobase.action.delete"/> </li> <li> <s:submit action="save" theme="simple" @@ -144,6 +143,10 @@ </s:if> <s:if test="%{!queryExists}"> <li> + <s:submit action="list" theme="simple" + key="echobase.action.cancel"/> + </li> + <li> <s:submit action="save" theme="simple" key="echobase.action.createSqlQuery"/> </li> @@ -170,7 +173,7 @@ jQuery(document).ready(function () { $('[name="query.topiaId"]').change(function (event) { - reloadPage({'query.topiaId':this.value}); + reloadPage(this.value); }); if (<s:property value='%{#noError and queryExists}'/>) { @@ -178,19 +181,13 @@ // load sql query $.ajax( { - url:'<s:url action="exportQueryResult" namespace="/exportQuery"/>', - data:{queryId:$('[name="query.topiaId"]').val()}, - success:function (data, textStatus, jqXHR) { + url: '<s:url action="exportQueryResult" namespace="/exportQuery"/>', + data: {queryId: $('[name="query.topiaId"]').val()}, + success: function (data, textStatus, jqXHR) { $('#resultGrid').html(data); } }); } - - if (<s:property value="newLibreOfficeQuery"/>) { - - // auto load new libreOffice dialog - openNewLibreOfficeDialog(); - } }); </script>
participants (1)
-
tchemit@users.forge.codelutin.com