r343 - in trunk/echobase-ui/src/main: java/fr/ifremer/echobase/ui java/fr/ifremer/echobase/ui/actions java/fr/ifremer/echobase/ui/actions/exportQuery resources/config resources/fr/ifremer/echobase/ui/actions resources/fr/ifremer/echobase/ui/actions/exportQuery resources/i18n webapp/WEB-INF webapp/WEB-INF/decorators webapp/WEB-INF/includes webapp/WEB-INF/jsp/dbeditor webapp/WEB-INF/jsp/exportQuery webapp/css
Author: tchemit Date: 2012-03-10 00:47:04 +0100 (Sat, 10 Mar 2012) New Revision: 343 Url: http://forge.codelutin.com/repositories/revision/echobase/343 Log: improve export query ui add non admin restrictions Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ 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 trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/confirmDeleteQuery.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/newLibreOfficeQuery.jsp Removed: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/export/ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-saveExportQuery-validation.xml Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.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/webapp/WEB-INF/decorators.xml trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQuery.jsp trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQueryResult.jsp trunk/echobase-ui/src/main/webapp/css/screen.css Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2012-03-09 23:47:04 UTC (rev 343) @@ -93,7 +93,7 @@ applicationContext.setConfiguration(configuration); if (log.isInfoEnabled()) { - log.info("Initializing RootContextSupplier..."); + log.info("Initializing RootContext..."); } EchoBaseTopiaRootContextFactory factory = new EchoBaseTopiaRootContextFactory(); @@ -146,7 +146,7 @@ } if (rootContext != null) { if (log.isInfoEnabled()) { - log.info("Shuting down RootContextSupplier..."); + log.info("Shuting down RootContext..."); } if (!rootContext.isClosed()) { try { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseSession.java 2012-03-09 23:47:04 UTC (rev 343) @@ -179,4 +179,9 @@ } } } + + public boolean isAdmin() { + EchoBaseUser user = getEchoBaseUser(); + return user!=null && user.isAdmin(); + } } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/EchoBaseActionSupport.java 2012-03-09 23:47:04 UTC (rev 343) @@ -132,6 +132,12 @@ return echoBaseSession; } + public boolean isAdmin() { + EchoBaseSession session = getEchoBaseSession(); + boolean result = session.isAdmin(); + return result; + } + public static String getApplicationVersion() { return getEchoBaseApplicationContext().getConfiguration().getApplicationVersion().toString(); } 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 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery.java 2012-03-09 23:47:04 UTC (rev 343) @@ -24,10 +24,14 @@ 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.ExportQueryService; +import fr.ifremer.echobase.services.exceptions.ExportQueryNameAlreadyExistException; 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.Collection; import java.util.Map; @@ -42,12 +46,23 @@ private static final long serialVersionUID = 1L; + /** Logger. */ + private static final Log log = LogFactory.getLog(ManageExportQuery.class); + /** All available queries from database. */ protected Map<String, String> queries; /** Selected query loaded from database if his id is not empty. */ protected ExportQuery query; + protected boolean newQuery; + + protected boolean newLibreOfficeQuery; + + protected boolean queryExists; + + protected boolean canUpdateQuery; + protected transient ExportQueryService service; public ExportQueryService getService() { @@ -72,27 +87,67 @@ return queries; } + public boolean isNewQuery() { + return newQuery; + } + + public void setNewQuery(boolean newQuery) { + this.newQuery = newQuery; + } + + public boolean isNewLibreOfficeQuery() { + return newLibreOfficeQuery; + } + + public void setNewLibreOfficeQuery(boolean newLibreOfficeQuery) { + this.newLibreOfficeQuery = newLibreOfficeQuery; + } + + public boolean isCanUpdateQuery() { + return canUpdateQuery; + } + + public boolean isQueryExists() { + return StringUtils.isNotEmpty(getQuery().getTopiaId()); + } + public String saveQuery() throws Exception { - //TODO : do validation + String result = INPUT; - query = getService().createOrUpdate(getQuery(), - getEchoBaseSession().getEchoBaseUser() - ); - return SUCCESS; + boolean safeSql = checkQuery(getQuery().getSqlQuery()); + + if (safeSql) { + try { + query = getService().createOrUpdate(getQuery(), + getEchoBaseSession().getEchoBaseUser() + ); + + result = SUCCESS; + } catch (ExportQueryNameAlreadyExistException e) { + addFieldError("query.name", + _("echobase.error.query.name.already.exists")); + + } + } + return result; } public String cloneQuery() throws Exception { - //TODO : do validation - getQuery().setTopiaId(null); + getQuery().setName(getQuery().getName() + "-clone"); query = getService().createOrUpdate(getQuery(), getEchoBaseSession().getEchoBaseUser() ); return SUCCESS; } + public String confirmDeleteQuery() throws Exception { + + return SUCCESS; + } + public String deleteQuery() throws Exception { //TODO : do validation @@ -102,27 +157,77 @@ } @Override + public String execute() { + + if (StringUtils.isNotEmpty(getQuery().getTopiaId())) { + + // test query + checkQuery(getQuery().getSqlQuery()); + } + return SUCCESS; + } + + private boolean checkQuery(String sql) { + boolean result; + try { + getService().testSql(sql); + 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; + } + + @Override public void prepare() throws Exception { Collection<ExportQuery> sqlQueries = getService().getEntities(ExportQuery.class); + queries = sortAndDecorate(sqlQueries, null); if (sqlQueries.isEmpty()) { + // no query saved addActionMessage(_("echobase.info.no.sqlQuery.saved")); } else { String selectedQueryId = getQuery().getTopiaId(); - if (StringUtils.isEmpty(selectedQueryId)) { + if (!isQueryExists()) { - // no query selected - addActionMessage(_("echobase.info.no.sqlQuery.selected")); + if (isNewQuery() || isNewLibreOfficeQuery()) { + + // new query in progress + addActionMessage(_("echobase.info.new.sqlQuery.inprogress")); + } else { + + // no query selected + addActionMessage(_("echobase.info.no.sqlQuery.selected")); + } } else { // load query from database query = getService().getExportQuery(selectedQueryId); + + EchoBaseUser echoBaseUser = + getEchoBaseSession().getEchoBaseUser(); + canUpdateQuery = echoBaseUser.isAdmin() || + echoBaseUser.getEmail().equals( + query.getLastModifiedUser()); + + if (!canUpdateQuery) { + + // this user can not update selected query + addActionMessage( + _("echobase.info.sqlQuery.not.modifiable")); + } } } } Added: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java (rev 0) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java 2012-03-09 23:47:04 UTC (rev 343) @@ -0,0 +1,80 @@ +/* + * #%L + * EchoBase :: UI + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 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.services.ExportQueryService; +import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * To deal with a new libre office request. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.3 + */ +public class NewLibreOfficeQuery extends EchoBaseActionSupport { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(NewLibreOfficeQuery.class); + + protected String libreOfficeQuery; + + protected String resultQuery; + + public String getLibreOfficeQuery() { + return libreOfficeQuery; + } + + public void setLibreOfficeQuery(String libreOfficeQuery) { + this.libreOfficeQuery = libreOfficeQuery; + } + + public String getResultQuery() { + return resultQuery; + } + + public void setResultQuery(String resultQuery) { + this.resultQuery = resultQuery; + } + + @Override + public String execute() { + + if (log.isInfoEnabled()) { + log.info("Incoming query = " + libreOfficeQuery); + } + + ExportQueryService service = newService(ExportQueryService.class); + + resultQuery = service.processLibreOfficeSqlQuery(libreOfficeQuery); + + if (log.isInfoEnabled()) { + log.info("Processed query " + resultQuery); + } + return SUCCESS; + } +} Property changes on: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/exportQuery/NewLibreOfficeQuery.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml =================================================================== --- trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/resources/config/struts-exportQuery.xml 2012-03-09 23:47:04 UTC (rev 343) @@ -42,10 +42,10 @@ </result-types> <!-- Display export query main page --> - <action name="manageExportQuery" method="input" + <action name="manageExportQuery" class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> <interceptor-ref name="paramsPrepareParamsStackLoggued"/> - <result name="input">/WEB-INF/jsp/exportQuery/exportQuery.jsp</result> + <result>/WEB-INF/jsp/exportQuery/exportQuery.jsp</result> </action> <!-- Display the result of the export query execution --> @@ -54,6 +54,14 @@ <result>/WEB-INF/jsp/exportQuery/exportQueryResult.jsp</result> </action> + <!-- Display the result of the export query execution --> + <action name="newLibreOfficeQuery" + class="fr.ifremer.echobase.ui.actions.exportQuery.NewLibreOfficeQuery"> + <result name="input">/WEB-INF/jsp/exportQuery/newLibreOfficeQuery.jsp + </result> + <result type="json"/> + </action> + <!-- Get result of the export query execution --> <action name="getExportQueryResult" class="fr.ifremer.echobase.ui.actions.exportQuery.GetExportQueryResult"> @@ -61,7 +69,7 @@ </action> <!-- Clone the export query --> - <action name="cloneExportQuery" method="cloneQuery" + <action name="clone" method="cloneQuery" class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> <interceptor-ref name="paramsPrepareParamsStackLoggued"/> <result name="input">/WEB-INF/jsp/exportQuery/exportQuery.jsp</result> @@ -69,21 +77,29 @@ </action> <!-- Save the export query --> - <action name="saveExportQuery" method="saveQuery" + <action name="save" method="saveQuery" class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> <interceptor-ref name="paramsPrepareParamsStackLoggued"/> <result name="input">/WEB-INF/jsp/exportQuery/exportQuery.jsp</result> <result type="redirectExportQuery"/> </action> + <!-- Confirm to delete the export query --> + <action name="confirmDelete" method="confirmDeleteQuery" + class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> + <interceptor-ref name="paramsPrepareParamsStackLoggued"/> + <result>/WEB-INF/jsp/exportQuery/confirmDeleteQuery.jsp</result> + </action> + <!-- Delete the export query --> - <action name="deleteExportQuery" method="deleteQuery" + <action name="delete" method="deleteQuery" class="fr.ifremer.echobase.ui.actions.exportQuery.ManageExportQuery"> <interceptor-ref name="paramsPrepareParamsStackLoggued"/> <result name="input">/WEB-INF/jsp/exportQuery/exportQuery.jsp</result> <result type="redirectExportQuery"/> </action> + <!-- Download the sql query csv file --> <action name="downloadExportQueryResult" class="fr.ifremer.echobase.ui.actions.exportQuery.DownloadExportQueryResult"> Added: 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 (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml 2012-03-09 23:47:04 UTC (rev 343) @@ -0,0 +1,50 @@ +<!-- + #%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 + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.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 Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-clone-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: 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 (rev 0) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml 2012-03-09 23:47:04 UTC (rev 343) @@ -0,0 +1,81 @@ +<!-- + #%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 + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.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 Property changes on: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-save-validation.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-saveExportQuery-validation.xml =================================================================== --- trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/export/ManageExportQuery-saveExportQuery-validation.xml 2012-03-01 22:47:17 UTC (rev 334) +++ trunk/echobase-ui/src/main/resources/fr/ifremer/echobase/ui/actions/exportQuery/ManageExportQuery-saveExportQuery-validation.xml 2012-03-09 23:47:04 UTC (rev 343) @@ -1,56 +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 - "-//OpenSymphony Group//XWork Validator 1.0.2//EN" - "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.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-validator type="regex"> - <!-- TODO sletellier 2011/11/14 : Find a better regex exression to define sql query --> - <param name="expression">^\s*select\s+.+\s+from\s+.+$</param> - <param name="caseSensitive">false</param> - <message key="echobase.error.export.sqlQuery.wrongformat"/> - </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 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties 2012-03-09 23:47:04 UTC (rev 343) @@ -1,3 +1,8 @@ +echobase.action.cancel=Cancel +echobase.action.generateSqlQuery=Generate request +echobase.action.newLibreOfficeQuery=New Libre office request +echobase.action.newQuery=New request +echobase.action.saveSqlQuery=Update query echobase.action.toEnglish=Use english version echobase.action.toFrench=Use the french version echobase.action.usingEnglish=English version used @@ -5,25 +10,41 @@ echobase.common.importError=Message d'erreur echobase.common.importFileName=Nom du fichier importé echobase.common.nbCreatedObjects=Nombre d'objets crées -echobase.error.bad.password= -echobase.error.email.already.used= -echobase.error.login.unknown= -echobase.error.mission.name.already.exist= +echobase.confirm.delete.query=Confirm to delete export query +echobase.error.bad.password=Bad password +echobase.error.email.already.used=Email already used +echobase.error.export.sqlQuery.forbidden.alter.word=Export query contains a forbidden word 'ALTER' +echobase.error.export.sqlQuery.forbidden.delete.word=Export query contains a forbidden word 'DELETE' +echobase.error.export.sqlQuery.forbidden.drop.word=Export query contains a forbidden word 'DROP' +echobase.error.export.sqlQuery.forbidden.insert.word=Export query contains a forbidden word 'INSERT' +echobase.error.export.sqlQuery.forbidden.update.word=Export query contains a forbidden word 'UPDATE' +echobase.error.invalid.sql=Invalid request \: %s +echobase.error.login.unknown=Unkwon login +echobase.error.mission.name.already.exist=Mission name already exists echobase.error.no.embeddedApplication.configurationFound= echobase.error.no.embeddedApplication.exportFileFound= echobase.error.no.exportDb.configurationFound= echobase.error.no.exportDb.exportFileFound= -echobase.error.required.email= -echobase.error.required.password= -echobase.error.warlocation.notFound= +echobase.error.query.name.already.exists=Query name already used +echobase.error.required.email=Email is required +echobase.error.required.password=Password is required +echobase.error.warlocation.notFound=War not found at location %s echobase.info.import.failed=L'import a échoué. echobase.info.import.succeded= +echobase.info.new.sqlQuery.inprogress=\=New query creation in progress echobase.info.no.sqlQuery.saved= echobase.info.no.sqlQuery.selected= echobase.info.no.table.selected= echobase.info.no.voyagee.found= +echobase.info.sqlQuery.not.modifiable=Current user can not udate the selected query echobase.info.user.create= echobase.info.user.delete= echobase.info.user.update= echobase.information.mission.created= +echobase.legend.dbeditor.show=Visualisation de '%s' echobase.legend.importData.result.resume=Résultat +echobase.legend.libreOfficeQuery=Requète "libre office" +echobase.menu.editData=Modify datas +echobase.menu.viewData=view datas +echobase.title.confirm.deleteQuery=Delete a export query +echobase.title.newLibreOfficeQuery=Import a new "Libre-Office" request 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 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties 2012-03-09 23:47:04 UTC (rev 343) @@ -1,28 +1,33 @@ echobase.action.applySqlQuery=Appliquer la requête echobase.action.backToUserList=Retour à la liste des utilisateurs -echobase.action.cloneSqlQuery=Cloner la requête +echobase.action.cancel=Annuler +echobase.action.cloneSqlQuery=Cloner echobase.action.configureImport=Configurer l'import echobase.action.create=Créer echobase.action.createEmbeddedApplication=Créer l'application echobase.action.createMission=Créer la mission +echobase.action.createSqlQuery=Enregistrer echobase.action.delete=Suppression -echobase.action.deleteSqlQuery=Supprimer la requête +echobase.action.deleteSqlQuery=Supprimer echobase.action.downloadEmbeddedApplicationFile=Télécharger l'application embarquée echobase.action.downloadExportDbFile=Télécharger le fichier d'export de la base complête echobase.action.export=Exporter echobase.action.exportSqlData=Exporter les données echobase.action.exportTable=Exporter +echobase.action.generateSqlQuery=Générer la requète echobase.action.import=Importer echobase.action.importTable=Importer echobase.action.locale.english=Anglais echobase.action.locale.french=Français echobase.action.login=Connection echobase.action.logout=Déconnexion +echobase.action.newLibreOfficeQuery=Nouvelle requète Libre office +echobase.action.newQuery=Nouvelle requète echobase.action.reloadSqlQuery=Recharger echobase.action.reset=Annuler echobase.action.return=Retour echobase.action.save=Sauvegarder -echobase.action.saveSqlQuery=Enregistrer la requête +echobase.action.saveSqlQuery=Mettre à jour echobase.action.toEnglish=Utiliser la version anglaise echobase.action.toFrench=Utiliser la version française echobase.action.usingEnglish=Version anglaise utilisé @@ -64,10 +69,16 @@ echobase.common.transitRelatedActivity=RelatedActivity (transit) echobase.common.user=Utilisateur echobase.common.voyageDescription=Description +echobase.confirm.delete.query=Confirmer la suppression de la requète suivante echobase.error.bad.password=Mot de passe incorrrect echobase.error.email.already.used=Nom d'utilisateur déjà pris echobase.error.export.description.requiredstring=La description de l'export est obligatoire echobase.error.export.name.requiredstring=Le nom de l'export est obligatoire +echobase.error.export.sqlQuery.forbidden.alter.word=La requète contient le mot 'ALTER', ce qui est interdit +echobase.error.export.sqlQuery.forbidden.delete.word=La requète contient le mot 'DELETE', ce qui est interdit +echobase.error.export.sqlQuery.forbidden.drop.word=La requète contient le mot 'DROP', ce qui est interdit +echobase.error.export.sqlQuery.forbidden.insert.word=La requète contient le mot 'INSERT', ce qui est interdit +echobase.error.export.sqlQuery.forbidden.update.word=La requète contient le mot 'UPDATE', ce qui est interdit echobase.error.export.sqlQuery.requiredstring=La requête de l'export est obligatoire echobase.error.export.sqlQuery.wrongformat=La requêtes n'est pas valide echobase.error.import.acousticDensityUnit.required=acousticDensityUnit non renseigné @@ -118,6 +129,7 @@ echobase.error.import.xtblTriFile.required=La sélection d'un fichier xtblTri est obligatoire echobase.error.importFile.required=Fichier d'import obligatoire echobase.error.importHistorical.input.required=Le fichier d'import est obligatoire +echobase.error.invalid.sql=Requète non valide \: %s echobase.error.login.unknown=Utilisateur inconnu echobase.error.login.wrongLogin=Le login est déjà utilisé echobase.error.mission.name.already.exist=Nom de mission déjà utilisé @@ -125,6 +137,7 @@ echobase.error.no.embeddedApplication.exportFileFound=L'application embarquée générée non trouvée echobase.error.no.exportDb.configurationFound=La configuration de l'export de la base non trouvée echobase.error.no.exportDb.exportFileFound=L'archive d'export de la base non trouvée +echobase.error.query.name.already.exists=Nom de requète déjà utilisé echobase.error.required.email=L'email est obligatoire echobase.error.required.password=Le mot de passe est obligatoire echobase.error.warlocation.notFound=L'application n'a pas été trouvé à l'emplacement suivant %s @@ -133,10 +146,12 @@ echobase.info.dbeditor.propertyDiffsResult=Résultat d'import de données echobase.info.import.failed=L'import a échoué. echobase.info.import.succeded=L'import a réussi. +echobase.info.new.sqlQuery.inprogress=Nouvelle requète en cours de création echobase.info.no.sqlQuery.saved=Aucune requête d'export sql enregistrée echobase.info.no.sqlQuery.selected=Aucune requête d'export sql sélectionnée echobase.info.no.table.selected=Aucune table sélectionnée echobase.info.no.voyagee.found=Aucune campagne à exporter +echobase.info.sqlQuery.not.modifiable=Vous ne pouvez pas modifier la requète sélectionnée echobase.info.user.create=L'utilisateur '%s' a été créée echobase.info.user.delete=L'utilisateur '%s' a été supprimé echobase.info.user.update=L'utilisateur '%s' a été mis à jour @@ -171,6 +186,7 @@ echobase.label.voyageToSelect=Voyage à exporter echobase.legend.connectionToDb.detail=Détail de la connection à la base de données echobase.legend.dbeditor.edit=Edition de '%s' +echobase.legend.dbeditor.show=Visualisation de '%s' echobase.legend.embeddedApplication.configuration=Configuration de l'application embarquée echobase.legend.exportDb.configuration.files=Configuration de l'export echobase.legend.importData.configuration.files=Choix des fichiers d'import @@ -184,23 +200,26 @@ echobase.legend.importData.result.resume=Résultat echobase.legend.importDb.configuration.files=Choix du fichier d'import de la base complête (fichier zip) echobase.legend.importFileResult=Résultat de l'import %s +echobase.legend.libreOfficeQuery=Requète "libre office" echobase.legend.sqlQuery.configuration=Configuration de la requête echobase.legend.sqlQuery.result=Résultats de la requête echobase.menu.connectToDbInformations=Informations de connection à la base de données echobase.menu.createEmbeddedApplication=Créer une application embarquée -echobase.menu.dbeditor=Modifier les données +echobase.menu.editData=Modifier les données echobase.menu.export=Exporter des données echobase.menu.exportDb=Exporter une base complête echobase.menu.importData=Importer des données echobase.menu.importDb=Importer une base complête echobase.menu.logs=Journal des modifications echobase.menu.users=Gérer les utilisateurs +echobase.menu.viewData=Visualiser les données echobase.message.askAdministratorPassword=Demander à un administrateur le mot de passe pour l'utilisateur donné echobase.message.no.row.selected=Aucune donnée sélectionnée echobase.message.noEntrySelection=Aucune entrée sélectionnée echobase.message.warnEmbeddedApplicationInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de la création de l'application embarquée. echobase.message.warnExportInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de l'export. echobase.message.warnImportInProgress=Merci de ne pas fermer la fenêtre pour pouvoir accéder aux résultats de l'import. +echobase.title.confirm.deleteQuery=Supprimer une requète echobase.title.connectToDbInformations=Informations de connection à la base de données echobase.title.createEmbeddedApplication=Création de l'application embarquée echobase.title.createMission=Créer une mission @@ -224,5 +243,6 @@ echobase.title.importTable=Importer une table echobase.title.login=Connexion echobase.title.modification.detail=Détail de la modification +echobase.title.newLibreOfficeQuery=Importer une requète Libre-office echobase.title.users=Adminitration des utilisateurs echobase.title.welcome=Bienvenue dans EchoBase Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/decorators/layout-default.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -37,7 +37,6 @@ jQuery(document).ready(function () { // apply common style -// $('fieldset').attr('class', 'ui-widget-content ui-corner-all') $('fieldset').attr('class', 'ui-corner-all') }); </script> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/decorators.xml 2012-03-09 23:47:04 UTC (rev 343) @@ -32,6 +32,8 @@ <pattern>/dbeditor/getForeignEntities*</pattern> <pattern>/dbeditor/doExport*</pattern> <pattern>/exportQuery/exportQueryResult*</pattern> + <pattern>/exportQuery/newLibreOfficeQuery*</pattern> + <pattern>/exportQuery/confirmDelete*</pattern> <pattern>/importData/get*</pattern> </excludes> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/includes/header.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -24,9 +24,6 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:set var="userIsAdmin" - value="%{#session.echoBaseSession.echoBaseUser.admin}"/> - <div class='displayBlock top'> <%@ include file="i18n.jsp" %> @@ -37,8 +34,6 @@ <div id='headerRight'> <div> - - <s:text name="echobase.label.user.login"> <s:param> <s:property value="#session.echoBaseSession.echoBaseUser.email"/> @@ -60,7 +55,7 @@ </div> <div class="cleanBoth menu"> <ul> - <s:if test="%{userIsAdmin}"> + <s:if test="%{admin}"> <li> <s:a action="configure" namespace="/importDb" method="input" cssClass="impBase"> <span><s:text name="echobase.menu.importDb"/></s:a></span> @@ -69,23 +64,21 @@ <s:a action="configure" namespace="/exportDb" method="input" cssClass="expBase"> <span><s:text name="echobase.menu.exportDb"/></s:a></span> </li> - </s:if> - <li> - <s:a action="selectImportType" namespace="/importData" method="input" cssClass="impDonnee"> + <li> + <s:a action="selectImportType" namespace="/importData" method="input" cssClass="impDonnee"> <span><s:text name="echobase.menu.importData"/></s:a></span> - </li> - <li> - <s:a action="manageExportQuery" namespace="/exportQuery" cssClass="expDonnee"> - <span><s:text name="echobase.menu.export"/></span> - </s:a> - </li> - <li> - <s:a action="dbeditor" namespace="/dbeditor" cssClass="modif"> - <span><s:text name="echobase.menu.dbeditor"/></span> - </s:a> - </li> - <s:if test="%{userIsAdmin}"> + </li> <li> + <s:a action="manageExportQuery" namespace="/exportQuery" cssClass="expDonnee"> + <span><s:text name="echobase.menu.export"/></span> + </s:a> + </li> + <li> + <s:a action="dbeditor" namespace="/dbeditor" cssClass="modif"> + <span><s:text name="echobase.menu.editData"/></span> + </s:a> + </li> + <li> <s:a action="userList" namespace="/user" cssClass="user"> <span><s:text name="echobase.menu.users"/></span> </s:a> @@ -96,17 +89,39 @@ <span><s:text name="echobase.menu.createEmbeddedApplication"/></span> </s:a> </li> + <li> + <s:a action="logs" namespace="/user" cssClass="journal"> + <span><s:text name="echobase.menu.logs"/></span> + </s:a> + </li> + <li> + <s:a action="connectToDbInformations" namespace="/user" cssClass="info"> + <span><s:text name="echobase.menu.connectToDbInformations"/></span> + </s:a> + </li> </s:if> - <li> - <s:a action="logs" namespace="/user" cssClass="journal"> - <span><s:text name="echobase.menu.logs"/></span> - </s:a> - </li> - <li> - <s:a action="connectToDbInformations" namespace="/user" cssClass="info"> - <span><s:text name="echobase.menu.connectToDbInformations"/></span> - </s:a> - </li> + <s:else> + <li> + <s:a action="manageExportQuery" namespace="/exportQuery" cssClass="expDonnee"> + <span><s:text name="echobase.menu.export"/></span> + </s:a> + </li> + <li> + <s:a action="dbeditor" namespace="/dbeditor" cssClass="modif"> + <span><s:text name="echobase.menu.viewData"/></span> + </s:a> + </li> + <li> + <s:a action="logs" namespace="/user" cssClass="journal"> + <span><s:text name="echobase.menu.logs"/></span> + </s:a> + </li> + <li> + <s:a action="connectToDbInformations" namespace="/user" cssClass="info"> + <span><s:text name="echobase.menu.connectToDbInformations"/></span> + </s:a> + </li> + </s:else> </ul> </div> </div> Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/dbeditor/dbeditor.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -84,7 +84,7 @@ // get entity value from json jQuery.getJSON("${getTableData}", - { "entityType":entityType, "id":id }, function (result) { + { "entityType":entityType, "id":id }, function (result) { // get metadatas from the response var metas = result.metas; @@ -199,28 +199,27 @@ <s:if test="tableSelected"> <sj:tabbedpanel id="io" collapsible="true"> - <sj:tab id="tab_importForm" target="importForm" - key='echobase.title.importTable'/> - <%--label="%{getText('echobase.title.importTable')}"/>--%> + <s:if test="admin"> + <sj:tab id="tab_importForm" target="importForm" + key='echobase.title.importTable'/> + <s:form id="importForm" namespace="/dbeditor" method="post" + enctype="multipart/form-data"> + + <s:hidden key="entityType" label=''/> + <s:file key="importFile" required="true" + label="%{getText('echobase.label.importFile')}"/> + + <s:checkbox key='createIfNotFound' value='true' + label='%{getText("echobase.label.createIfNotFound")}'/> + <br/> + <s:submit key="echobase.action.importTable" action="doImport" + align="right"/> + </s:form> + </s:if> <sj:tab id="tab_exportForm" target="exportForm" key="echobase.title.exportTable"/> - <%--label="%{getText('echobase.title.exportTable')}"/>--%> - <s:form id="importForm" namespace="/dbeditor" method="post" - enctype="multipart/form-data"> - - <s:hidden key="entityType" label=''/> - <s:file key="importFile" required="true" - label="%{getText('echobase.label.importFile')}"/> - - <s:checkbox key='createIfNotFound' value='true' - label='%{getText("echobase.label.createIfNotFound")}'/> - <br/> - <s:submit key="echobase.action.importTable" action="doImport" - align="right"/> - </s:form> - <s:form id="exportForm" namespace="/dbeditor" method="post"> <s:hidden key="entityType" label=''/> <s:textfield key="exportFileName" required="true" size="100" @@ -294,9 +293,16 @@ <fieldset id="noRowSelected"> <legend> - <s:text name="echobase.legend.dbeditor.edit"> - <s:param value="%{tableI18nName}"/> - </s:text> + <s:if test="admin"> + <s:text name="echobase.legend.dbeditor.edit"> + <s:param value="%{tableI18nName}"/> + </s:text> + </s:if> + <s:else> + <s:text name="echobase.legend.dbeditor.show"> + <s:param value="%{tableI18nName}"/> + </s:text> + </s:else> </legend> <i><s:text name="echobase.message.no.row.selected"/>.</i> </fieldset> @@ -304,67 +310,67 @@ <s:form id="editForm" namespace="/dbeditor"> <fieldset> <legend> - <s:text name="echobase.legend.dbeditor.edit"> - <s:param value="%{tableI18nName}"/> - </s:text> + <s:if test="admin"> + <s:text name="echobase.legend.dbeditor.edit"> + <s:param value="%{tableI18nName}"/> + </s:text> + </s:if> + <s:else> + <s:text name="echobase.legend.dbeditor.show"> + <s:param value="%{tableI18nName}"/> + </s:text> + </s:else> </legend> <s:hidden key="entityType" label=''/> <s:hidden id="topiaId" name='topiaId' label=''/> - <s:textfield id="entityId" name='topiaId' label='%{getText("echobase.common.id")}' readonly="true" size="250"/> + <s:textfield id="entityId" name='topiaId' readonly="true" + label='%{getText("echobase.common.id")}' size="250"/> <s:iterator value="columnMetas" var="meta" status="status"> <s:set var="metaName" value='%{#meta.name}'/> <s:if test="#meta.fK"> - <s:url id="urlName" - action="getForeignEntities" - namespace="/dbeditor" + <s:url id="urlName" action="getForeignEntities" namespace="/dbeditor" escapeAmp="false"> <s:param name="entityType" value="%{#meta.typeSimpleName}"/> </s:url> - <sj:select id="%{#metaName}" - label="%{#metaName}" - href="%{urlName}" - list="entities" - emptyOption="true"/> + <sj:select id="%{#metaName}" label="%{#metaName}" readonly="%{!admin}" + href="%{urlName}" list="entities" emptyOption="true"/> </s:if> <s:else> <s:if test='#meta.columnType == "string"'> - <s:textfield id="%{#metaName}" - name="%{#metaName}" - label="%{#metaName}" - disabled="%{#meta.fK}" - value="" size="250"/> + <s:textfield id="%{#metaName}" name="%{#metaName}" + label="%{#metaName}" disabled="%{#meta.fK}" + value="" size="250" readonly="%{!admin}"/> </s:if> <s:elseif test='#meta.columnType == "boolean"'> - <s:checkbox id="%{#metaName}" - name="%{#metaName}" + <s:checkbox id="%{#metaName}" name="%{#metaName}" + readonly="%{!admin}" label="%{#metaName}" value="%{false}"/> </s:elseif> <s:elseif test='#meta.columnType == "date"'> - <sj:datepicker id="%{#metaName}" - name="%{#metaName}" - label="%{#metaName}" - value="%{new java.util.Date()}" - displayFormat="dd/mm/yy" - timepicker="true" - timepickerShowSecond="true" + <sj:datepicker id="%{#metaName}" name="%{#metaName}" + label="%{#metaName}" value="%{new java.util.Date()}" + displayFormat="dd/mm/yy" timepicker="true" + timepickerShowSecond="true" readonly="%{!admin}" timepickerFormat="hh:mm:ss"/> </s:elseif> </s:else> <br/> </s:iterator> </fieldset> - <ul class="toolbar floatRight"> - <li><s:submit name='resetAction' key="echobase.action.reset" - theme="simple" onclick="return false;"/> - </li> - <li><s:submit name="submitAction" key="echobase.action.save" - action="editTableData" theme="simple"/> - </li> - </ul> + <s:if test="admin"> + <ul class="toolbar floatRight"> + <li><s:submit name='resetAction' key="echobase.action.reset" + theme="simple" onclick="return false;"/> + </li> + <li><s:submit name="submitAction" key="echobase.action.save" + action="editTableData" theme="simple"/> + </li> + </ul> + </s:if> </s:form> </s:if> Added: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/confirmDeleteQuery.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/confirmDeleteQuery.jsp (rev 0) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/confirmDeleteQuery.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -0,0 +1,75 @@ +<%-- + #%L + EchoBase :: UI + + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 - 2012 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% + --%> +<%@page contentType="text/html" pageEncoding="UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> + + +<script type="text/javascript"> + + function cancel() { + $('#confirDeleteDialog').dialog('close'); + return false; + } +</script> + +<div class="dialogContainer ui-corner-all"> + + <s:label key="echobase.confirm.delete.query" theme="simple"/> + + <fieldset class="ui-corner-all"> + + + + <s:textarea name="query.name" required="true" cols="160" rows="1" + readonly="true" + label="%{getText('echobase.label.query.name')}"/> + + <s:textarea name="query.description" required="true" cols="160" rows="2" + readonly="true" + label="%{getText('echobase.label.query.description')}"/> + + <s:textarea name="query.sqlQuery" required="true" cols="160" rows="4" + label="%{getText('echobase.label.query.sql')}"/> + + <br/> + + <s:form namespace="/exportQuery"> + + <s:hidden key="query.topiaId" label=''/> + + <ul class="toolbar floatRight"> + <li> + <s:submit onclick="return cancel();" theme="simple" + key="echobase.action.cancel"/> + </li> + <li> + <s:submit action="delete" theme="simple" + key="echobase.action.deleteSqlQuery"/> + </li> + </ul> + </s:form> + </fieldset> + +</div> \ No newline at end of file Property changes on: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/confirmDeleteQuery.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native 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 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQuery.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -25,112 +25,189 @@ <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> -<s:url id="reloadUrl" action='manageExportQuery' namespace='/exportQuery'/> -<s:url id="exportSqlResultUrl" action="exportQueryResult" namespace="/exportQuery"/> <s:set var="noError" value="!hasErrors()"/> + +<%--s:set var="queryExists" value="query.topiaId != null && query.topiaId != ''"/--%> +<%--s:set var="canUpdateQuery" + value="%{admin or query.lastModifiedUser == echoBaseSession.echoBaseUser.email}"/--%> + <script type="text/javascript"> - function reloadQuery() { - var queryId = $('[name="query.topiaId"]').val(); - var url = "${reloadUrl}?" + $.param({ 'query.topiaId':queryId}); - window.location = url; + function reloadPage(params) { + var url = "<s:url action='manageExportQuery' namespace='/exportQuery'/>?"; + window.location = url + $.param(params); return false; } - function loadGridData() { - // get sql query - var sqlQuery = "${exportSqlResultUrl}?" + - $.param({ sql :$('[name="query.sqlQuery"]').val()}); - - $.ajax(sqlQuery, { - success: function(data, textStatus, jqXHR) { - $('#resultGrid').html(data); + function newQuery(newParam) { + if (<s:property value="%{queryExists or (!newQuery and !newLibreOfficeQuery)}"/>) { + var params = {}; + params[newParam] = true; + reloadPage(params); + } else { + $('[name="query.topiaId"]').val(''); + $('[name="query.name"]').val(''); + $('[name="query.description"]').val(''); + $('[name="query.sqlQuery"]').val(''); + if (newParam=='newLibreOfficeQuery') { + openNewLibreOfficeDialog(); } - }); + } return false; } - jQuery(document).ready(function () { + function reloadQuery() { + return reloadPage({'query.topiaId':'<s:property value="query.topiaId"/>'}); + } - $('[name="query.topiaId"]').change(function(event) { - var url = "${reloadUrl}?" + $.param({ 'query.topiaId':this.value}); - window.location = url; - }); + function openNewLibreOfficeDialog() { + var dialog = $("#newLibreOfficeDialog"); + var url = "<s:url action='newLibreOfficeQuery' namespace='/exportQuery' method="input"/>"; + dialog.load(url); + dialog.dialog('open'); + } - var queryId = $('[name="query.topiaId"]').val(); - if (queryId && ${noError}) { - // auto launch query - loadGridData(); + function newLibreOfficeQuery() { + if (<s:property value="%{queryExists or (!newQuery and !newLibreOfficeQuery)}"/>) { + reloadPage({'newLibreOfficeQuery':true}); + } else { + $('[name="query.topiaId"]').val(''); + $('[name="query.name"]').val(''); + $('[name="query.description"]').val(''); + $('[name="query.sqlQuery"]').val(''); + openNewLibreOfficeDialog(); } + return false; + } - }); - - + function confirmDeleteQuery() { + var url = "<s:url action='confirmDelete' namespace='/exportQuery'/>?" + + $.param({ 'query.topiaId':'<s:property value="query.topiaId"/>'}); + var dialog = $("#confirDeleteDialog"); + dialog.load(url); + dialog.dialog('open'); + return false; + } </script> <title><s:text name="echobase.title.export"/></title> -<s:set var="queryExists" value="query.topiaId != null && query.topiaId != ''"/> - <s:form id="exportQueryForm" namespace="/exportQuery"> - <s:select key="query.topiaId" label="%{getText('echobase.label.sqlQueries')}" - list="queries" headerKey="" headerValue=""/> + <ul class="toolbar floatLeft"> + <li> + <s:submit onclick="return newQuery('newQuery');" theme="simple" + key="echobase.action.newQuery"/> + </li> + <li> + <s:submit onclick="return newQuery('newLibreOfficeQuery');" theme="simple" + key="echobase.action.newLibreOfficeQuery"/> + </li> + </ul> - <br/> - <fieldset> - <legend><s:text name="echobase.legend.sqlQuery.configuration"/></legend> + <legend><s:text name="echobase.label.sqlQueries"/></legend> + <s:select key="query.topiaId" cssStyle="font-size: 140%" + label="%{getText('echobase.label.sqlQueries')}" + list="queries" headerKey="" headerValue="" theme="simple"/> + </fieldset> - <s:textarea key="query.name" required="true" cols="160" rows="1" - label="%{getText('echobase.label.query.name')}"/> + <s:if test="%{!#noError or queryExists or newQuery or newLibreOfficeQuery}"> + <fieldset> + <legend><s:text name="echobase.legend.sqlQuery.configuration"/></legend> - <s:textarea key="query.description" required="true" cols="160" rows="2" - label="%{getText('echobase.label.query.description')}"/> + <s:textarea key="query.name" required="true" cols="160" rows="1" + readonly="%{queryExists and !canUpdateQuery}" + label="%{getText('echobase.label.query.name')}"/> - <s:textarea key="query.sqlQuery" required="true" cols="160" rows="4" - label="%{getText('echobase.label.query.sql')}"/> + <s:textarea key="query.description" required="true" cols="160" rows="2" + readonly="%{queryExists and !canUpdateQuery}" + label="%{getText('echobase.label.query.description')}"/> - <s:if test="queryExists"> + <s:textarea key="query.sqlQuery" required="true" cols="160" rows="4" + readonly="%{queryExists and !canUpdateQuery}" + label="%{getText('echobase.label.query.sql')}"/> - <s:label value="%{query.lastModifiedDate}" readonly="true" - label="%{getText('echobase.common.lastModifiedDate')}"/> + <s:if test="queryExists"> + <s:label value="%{query.lastModifiedDate}" readonly="true" + label="%{getText('echobase.common.lastModifiedDate')}"/> - <s:label value="%{query.lastModifiedUser}" readonly="true" - label="%{getText('echobase.common.lastModifiedUser')}"/> + <s:label value="%{query.lastModifiedUser}" readonly="true" + label="%{getText('echobase.common.lastModifiedUser')}"/> + </s:if> - </s:if> - - - <ul class="toolbar floatRight"> - <s:if test="queryExists"> - <li> - <s:submit onclick="return reloadQuery();" theme="simple" - key="echobase.action.reloadSqlQuery"/> - </li> - <li> - <s:submit action="cloneExportQuery" theme="simple" - key="echobase.action.cloneSqlQuery"/> - </li> - <li> - <s:submit action="deleteExportQuery" theme="simple" - key="echobase.action.deleteSqlQuery"/> - </li> - </s:if> - <li> - <s:submit action="saveExportQuery" theme="simple" - key="echobase.action.saveSqlQuery"/> - </li> - <li> - <s:submit key="echobase.action.applySqlQuery" theme="simple" - onclick="return loadGridData();"/> - </li> - </ul> - </fieldset> + <ul id="dbeditorToolbar" class="toolbar floatRight"> + <s:if test="queryExists"> + <li> + <s:submit onclick="return reloadQuery();" theme="simple" + key="echobase.action.reloadSqlQuery"/> + </li> + <li> + <s:submit action="clone" theme="simple" + key="echobase.action.cloneSqlQuery"/> + </li> + <s:if test="canUpdateQuery"> + <li> + <s:submit onclick="return confirmDeleteQuery();" theme="simple" + key="echobase.action.deleteSqlQuery"/> + </li> + <li> + <s:submit action="save" theme="simple" + key="echobase.action.saveSqlQuery"/> + </li> + </s:if> + </s:if> + <s:if test="%{!queryExists}"> + <li> + <s:submit action="save" theme="simple" + key="echobase.action.createSqlQuery"/> + </li> + </s:if> + </ul> + </fieldset> + </s:if> </s:form> <br/> <div id="resultGrid" class="cleanBoth"></div> +<sj:dialog id="newLibreOfficeDialog" resizable="false" + title="%{getText('echobase.title.newLibreOfficeQuery')}" + autoOpen="false" modal="true" width="780"/> +<sj:dialog id="confirDeleteDialog" resizable="false" + title="%{getText('echobase.title.confirm.deleteQuery')}" + autoOpen="false" modal="true" width="780"/> + +<script type="text/javascript"> + + jQuery(document).ready(function () { + + $('[name="query.topiaId"]').change(function (event) { + reloadPage({'query.topiaId':this.value}); + }); + + if (<s:property value='%{#noError and queryExists}'/>) { + + // load sql query + $.ajax( + { + url:'<s:url action="exportQueryResult" namespace="/exportQuery"/>', + data:{sql:$('[name="query.sqlQuery"]').val()}, + success:function (data, textStatus, jqXHR) { + $('#resultGrid').html(data); + } + }); + } + + if (<s:property value="newLibreOfficeQuery"/>) { + + // auto load new libreOffice dialog + openNewLibreOfficeDialog(); + } + }); + +</script> + + Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQueryResult.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQueryResult.jsp 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/exportQueryResult.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -52,7 +52,7 @@ <s:form action="downloadExportQueryResult" namespace="/exportQuery"> - <fieldset> + <fieldset class="ui-corner-all"> <legend><s:text name="echobase.legend.sqlQuery.result"/></legend> <s:hidden key="sql" label=""/> Added: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/newLibreOfficeQuery.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/newLibreOfficeQuery.jsp (rev 0) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/newLibreOfficeQuery.jsp 2012-03-09 23:47:04 UTC (rev 343) @@ -0,0 +1,94 @@ +<%-- + #%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% + --%> +<%@page contentType="text/html" pageEncoding="UTF-8" %> +<%@ taglib prefix="s" uri="/struts-tags" %> +<%@ taglib prefix="sj" uri="/struts-jquery-tags" %> + +<s:set var="noError" value="!hasErrors()"/> + +<script type="text/javascript"> + + function generateSqlQuery() { + + var libreOfficeQuery = $('[name="libreOfficeQuery"]').val(); + + console.info("libreOfficeQuery = "+libreOfficeQuery); + + var canQuit = true; + + $.ajax( + { + url:'<s:url action="newLibreOfficeQuery" namespace="/exportQuery"/>', + data:{libreOfficeQuery:libreOfficeQuery}, + async:false, + dataType:"json", + success:function (data, textStatus) { + var libreOfficeQuery = data.libreOfficeQuery; + var resultQuery = data.resultQuery; + console.info("libreOfficeQuery = "+libreOfficeQuery); + console.info("resultQuery = "+resultQuery); + $('[name="query.sqlQuery"]').val(resultQuery); + } + }); + + if (canQuit) { + return cancel(); + } + return false; + } + + function cancel() { + $('#newLibreOfficeDialog').dialog('close'); + return false; + } + + jQuery(document).ready(function () { + + }); + +</script> + +<title><s:text name="echobase.title.export"/></title> +<div class="dialogContainer ui-corner-all"> + <%--s:form--%> + + <fieldset class="ui-corner-all"> + <legend><s:text name="echobase.legend.libreOfficeQuery"/></legend> + + <s:textarea name="libreOfficeQuery" required="true" cols="500" rows="8" + theme="simple" value=""/> + + <ul class="toolbar floatRight"> + <li> + <s:submit onclick="return cancel();" theme="simple" + key="echobase.action.cancel"/> + </li> + <li> + <s:submit onclick="return generateSqlQuery();" theme="simple" + key="echobase.action.generateSqlQuery"/> + </li> + </ul> + </fieldset> + <%--/s:form--%> +</div> Property changes on: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/exportQuery/newLibreOfficeQuery.jsp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-ui/src/main/webapp/css/screen.css =================================================================== --- trunk/echobase-ui/src/main/webapp/css/screen.css 2012-03-09 23:45:00 UTC (rev 342) +++ trunk/echobase-ui/src/main/webapp/css/screen.css 2012-03-09 23:47:04 UTC (rev 343) @@ -263,11 +263,16 @@ float:right; } ul.toolbar { - clear: both; + /*clear: both;*/ display: block; - padding-top: 20px; + /*padding-top: 20px;*/ position: relative; } + +#dbeditorToolbar { + clear: both; + padding-top: 20px; +} ul.toolbar li { display: inline; padding-bottom: 0; @@ -374,9 +379,19 @@ padding:20px; position:relative; min-width:615px; + min-height:415px; clear:both; color:#FFF; } + +.dialogContainer{ + background:#03497c; + padding:20px; + position:relative; + clear:both; + color:#FFF; +} + .containerHome{ margin:3em 8em; background:#03497c; @@ -408,7 +423,7 @@ label{ font-size:140%; } -input, textarea{ +input, textarea, select{ border:3px solid #0063ab; border-radius:5px; -moz-border-radius:5px; @@ -417,7 +432,7 @@ margin-bottom: 10px; max-width: 500px; } -input[type="password"], input[type="text"]{ +input[type="password"], input[type="text"], select{ height:35px; } input[type="submit"]{
participants (1)
-
tchemit@users.forge.codelutin.com