← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 18232: SQL view, cleanup, removed ResourceTableNameMap.java

 

------------------------------------------------------------
revno: 18232
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2015-02-12 10:12:38 +0100
message:
  SQL view, cleanup, removed ResourceTableNameMap.java
removed:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/ResourceTableNameMap.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewJoinLib.java
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewExpandStore.java
  dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewExpandStore.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== removed file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/ResourceTableNameMap.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/ResourceTableNameMap.java	2015-01-17 07:41:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/ResourceTableNameMap.java	1970-01-01 00:00:00 +0000
@@ -1,64 +0,0 @@
-package org.hisp.dhis.sqlview;
-
-/*
- * Copyright (c) 2004-2015, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Dang Duy Hieu
- * @version $Id ResourceTableNameMap.java Aug 10, 2010$
- */
-public class ResourceTableNameMap
-{    
-    private static Map<String, String> ignoredNameMap;
-
-    static
-    {
-        ignoredNameMap = new HashMap<>();
-
-        ignoredNameMap.put( "_users", "users" );
-        ignoredNameMap.put( "_uinfo", "userinfo" );
-        ignoredNameMap.put( "_trackedentityinstance", "trackedentityinstance" );
-        ignoredNameMap.put( "_trackedentityattr", "trackedentityattribute" );
-        ignoredNameMap.put( "_relationship", "relationship.*" );
-        ignoredNameMap.put( "_caseaggrcondition", "caseaggregationcondition" );
-    }
-
-    public static String getIgnoredNameByAlias( String alias )
-    {
-        return ignoredNameMap.get( alias );
-    }
-
-    public static Map<String, String> getIgnoredNameMap()
-    {
-        return ignoredNameMap;
-    }
-
-}

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java	2015-02-11 22:50:44 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java	2015-02-12 09:12:38 +0000
@@ -28,10 +28,11 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonView;
-import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
-import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
 import org.apache.commons.lang.StringUtils;
 import org.hisp.dhis.common.BaseIdentifiableObject;
 import org.hisp.dhis.common.DxfNamespaces;
@@ -41,10 +42,11 @@
 import org.hisp.dhis.common.view.ExportView;
 import org.hisp.dhis.schema.annotation.PropertyRange;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonView;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import com.google.common.collect.Sets;
 
 /**
  * @author Dang Duy Hieu
@@ -57,6 +59,9 @@
 
     private static final String CRITERIA_SEP = ":";
 
+    public static final Set<String> PROTECTED_TABLES = Sets.newHashSet( "users", "userinfo", 
+        "trackedentityinstance", "trackedentityattribute", "trackedentityattributevalue", "relationship" );
+    
     // -------------------------------------------------------------------------
     // Variables
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewExpandStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewExpandStore.java	2015-02-11 22:32:01 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewExpandStore.java	2015-02-12 09:12:38 +0000
@@ -34,7 +34,6 @@
 
 /**
  * @author Dang Duy Hieu
- * @version $Id SqlViewExpandStore.java July 06, 2010$
  */
 public interface SqlViewExpandStore
 {
@@ -50,5 +49,11 @@
     
     void executeQuery( Grid grid, String sql );
 
+    /**
+     * Tests the given SQL for validity.
+     * 
+     * @param sql the SQL string.
+     * @return a non-null description if invalid, and null if valid.
+     */
     String testSqlGrammar( String sql );
 }

=== removed file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewJoinLib.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewJoinLib.java	2015-01-17 07:41:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewJoinLib.java	1970-01-01 00:00:00 +0000
@@ -1,158 +0,0 @@
-package org.hisp.dhis.sqlview;
-
-/*
- * Copyright (c) 2004-2015, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * @author Dang Duy Hieu
- * @version $Id SqlCodeMapUtil.java Aug 16, 2010$
- */
-public class SqlViewJoinLib
-{
-    public static final String COCN_JOIN_CS = "JOIN _categorystructure AS _cs ON _cocn.categoryoptioncomboid = _cs.categoryoptioncomboid \n";
-
-    public static final String COCN_JOIN_DV = "JOIN datavalue AS dv ON _cocn.categoryoptioncomboid = dv.categoryoptioncomboid \n";
-
-    public static final String CS_JOIN_COCN = "JOIN _categoryoptioncomboname AS _cocn ON _cs.categoryoptioncomboid = _cocn.categoryoptioncomboid \n";
-
-    public static final String DEGSS_JOIN_DV = "JOIN datavalue AS dv ON _degss.dataelementid = dv.dataelementid \n";
-
-    public static final String DV_JOIN_COCN = "JOIN _categoryoptioncomboname AS _cocn ON dv.categoryoptioncomboid = _cocn.categoryoptioncomboid \n";
-
-    public static final String DV_JOIN_DEGSS = "JOIN _dataelementgroupsetstructure AS _degss ON dv.dataelementid = _degss.dataelementid \n";
-
-    public static final String DV_JOIN_OUS = "JOIN _orgunitstructure AS _ous ON dv.sourceid = _ous.organisationunitid \n";
-
-    public static final String DV_JOIN_OUSTGSS = "JOIN _organisationunitgroupsetstructure AS _oustgss ON dv.sourceid = _oustgss.organisationunitid \n";
-
-    public static final String OUS_JOIN_DV = "JOIN datavalue AS dv ON _ous.organisationunitid = dv.sourceid \n";
-
-    public static final String OUGSS_JOIN_DV = "JOIN datavalue AS dv ON _ougss.organisationunitid = dv.sourceid \n";
-
-    public static final String OUSTGSS_JOIN_DV = "JOIN datavalue AS dv ON _oustgss.organisationunitid = dv.sourceid \n";
-
-    public static final String OUS_JOIN_OUGSS = "JOIN _orgunitgroupsetstructure AS _ougss ON _ous.organisationunitid = _ougss.organisationunitid \n";
-
-    public static final String OUS_JOIN_OUSTGSS = "JOIN _organisationunitgroupsetstructure AS _oustgss ON _ous.organisationunitid = _oustgss.organisationunitid \n";
-
-    public static final String OUGSS_JOIN_OUS = "JOIN _orgunitstructure AS _ous ON _ougss.organisationunitid = _ous.organisationunitid \n";
-
-    public static final String OUGSS_JOIN_OUSTGSS = "JOIN _organisationunitgroupsetstructure AS _oustgss ON _ougss.organisationunitid = _oustgss.organisationunitid \n";
-
-    public static final String OUSTGSS_JOIN_OUS = "JOIN _orgunitstructure AS _ous ON _oustgss.organisationunitid = _ous.organisationunitid \n";
-
-    public static final String OUSTGSS_JOIN_OUGSS = "JOIN _orgunitgroupsetstructure AS _ougss ON _oustgss.organisationunitid = _ougss.organisationunitid \n";
-
-    /**
-     * COCN_JOIN_DEGSS presents to the relationship between two resourcetables
-     * _CategoryOptionComboname and _DataElementGroupSetStructure through the
-     * INNER JOIN between DataValue and _DataElementGroupSetStructure
-     */
-    public static final String COCN_JOIN_DEGSS = COCN_JOIN_DV + DV_JOIN_DEGSS;
-
-    /**
-     * DEGSS_JOIN_COCN presents to the relationship between two resourcetables
-     * _dataelementgroupsetstructure and _CategoryOptionComboname through the
-     * INNER JOIN between DataValue and _CategoryOptionComboname
-     */
-    public static final String DEGSS_JOIN_COCN = DEGSS_JOIN_DV + DV_JOIN_COCN;
-
-    /**
-     * COCN_JOIN_OUS presents to the relationship between two resourcetables
-     * _CategoryOptionComboname and _OrgUnitStructure through the INNER JOIN
-     * between DataValue and _OrgUnitStructure
-     */
-    public static final String COCN_JOIN_OUS = COCN_JOIN_DV + DV_JOIN_OUS;
-
-    /**
-     * COCN_JOIN_OUSTGSS presents to the relationship between two resourcetables
-     * _CategoryOptionComboname and _OrganisationUnitGroupSetStructure through
-     * the INNER JOIN between DataValue and _OrganisationUnitGroupSetStructure
-     */
-    public static final String COCN_JOIN_OUSTGSS = COCN_JOIN_DV + DV_JOIN_OUSTGSS;
-
-    /**
-     * OUSTGSS_JOIN_COCN presents to the relationship between two resourcetables
-     * _OrganisationUnitGroupSetStructure and _CategoryOptionComboname through
-     * the INNER JOIN between DataValue and _CategoryOptionComboname
-     */
-    public static final String OUSTGSS_JOIN_COCN = OUSTGSS_JOIN_DV + DV_JOIN_COCN;
-
-    /**
-     * OUGSS_JOIN_COCN presents to the relationship between two resourcetables
-     * _OrgUnitGroupSetStructure and _CategoryOptionComboname through the INNER
-     * JOIN between DataValue and _CategoryOptionComboname
-     */
-    public static final String OUGSS_JOIN_COCN = OUGSS_JOIN_DV + DV_JOIN_COCN;
-
-    /**
-     * OUS_JOIN_COCN presents to the relationship between two resourcetables
-     * _OrgUnitStructure and _CategoryOptionComboname through the INNER JOIN
-     * between DataValue and _CategoryOptionComboname
-     */
-    public static final String OUS_JOIN_COCN = OUS_JOIN_DV + DV_JOIN_COCN;
-
-    /**
-     * OUS_JOIN_DEGSS presents to the relationship between two resourcetables
-     * _OrgUnitStructure and _DataElementGroupSetStructure through the INNER
-     * JOIN between DataValue and _DataElementGroupSetStructure
-     */
-    public static final String OUS_JOIN_DEGSS = OUS_JOIN_DV + DV_JOIN_DEGSS;
-
-    /**
-     * OUGSS_JOIN_DEGSS presents to the relationship between two
-     * resourcetables_OrgUnitGroupSetStructure and _DataElementGroupSetStructure
-     * through the INNER JOIN between DataValue and
-     * _DataElementGroupSetStructure
-     */
-    public static final String OUGSS_JOIN_DEGSS = OUGSS_JOIN_DV + DV_JOIN_DEGSS;
-
-    /**
-     * OUGSS_JOIN_DEGSS presents to the relationship between two
-     * _OrganisationUnitGroupSetStructure and _DataElementGroupSetStructure
-     * through the INNER JOIN between DataValue and
-     * _DataElementGroupSetStructure
-     */
-    public static final String OUSTGSS_JOIN_DEGSS = OUSTGSS_JOIN_DV + DV_JOIN_DEGSS;
-
-    /**
-     * DEGSS_JOIN_OUS presents to the relationship between two resourcetables
-     * _DataElementGroupSetStructure and _OrgUnitStructure through the INNER
-     * JOIN between DataValue and _OrgUnitStructure
-     */
-    public static final String DEGSS_JOIN_OUS = DEGSS_JOIN_DV + DV_JOIN_OUS;
-
-    /**
-     * DEGSS_JOIN_OUSTGSS presents to the relationship between two
-     * resourcetables _DataElementGroupSetStructure and
-     * _OrganisationUnitGroupSetStructure through the INNER JOIN between
-     * DataValue and _OrganisationUnitGroupSetStructure
-     */
-    public static final String DEGSS_JOIN_OUSTGSS = DEGSS_JOIN_DV + DV_JOIN_OUSTGSS;
-
-}

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewExpandStore.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewExpandStore.java	2015-02-11 22:32:01 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewExpandStore.java	2015-02-12 09:12:38 +0000
@@ -162,7 +162,7 @@
             return ex.getCause().getMessage();
         }
 
-        return "";
+        return null;
     }
 
     @Override

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java	2015-02-11 22:50:44 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java	2015-02-12 09:12:38 +0000
@@ -28,13 +28,12 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import com.opensymphony.xwork2.Action;
 import org.hisp.dhis.i18n.I18n;
 import org.hisp.dhis.sqlview.SqlViewService;
 
-import java.util.Map;
+import com.opensymphony.xwork2.Action;
 
-import static org.hisp.dhis.sqlview.ResourceTableNameMap.getIgnoredNameMap;
+import static org.hisp.dhis.sqlview.SqlView.PROTECTED_TABLES;
 
 /**
  * @author Dang Duy Hieu
@@ -43,19 +42,12 @@
     implements Action
 {
     private static final String ADD = "add";
-
     private static final String SEMICOLON = ";";
-
-    private static final String SEPERATE = "|";
-
+    private static final String SEP = "|";
     private static final String SPACE = " ";
-
     private static final String INTO = " into ";
-
     private static final String REGEX_SELECT_QUERY = "^(?i)\\s*select\\s{1,}.+$";
-
     private static final String PREFIX_REGEX_IGNORE_TABLES_QUERY = "^(?i).+((?<=[^\\d\\w])(";
-
     private static final String SUFFIX_REGEX_IGNORE_TABLES_QUERY = ")(?=[^\\d\\w])).*$";
 
     // -------------------------------------------------------------------------
@@ -123,8 +115,8 @@
     @Override
     public String execute()
     {
-        message = "";
-
+        message = null;
+        
         if ( name == null || name.trim().isEmpty() )
         {
             message = i18n.getString( "name_is_null" );
@@ -146,7 +138,7 @@
             return INPUT;
         }
 
-        final String ignoredRegex = this.setUpIgnoredRegex();
+        final String validationRegex = getValidationRegex();
 
         for ( String s : sqlquery.split( SEMICOLON ) )
         {
@@ -159,7 +151,7 @@
                 return INPUT;
             }
 
-            if ( tmp.concat( SPACE ).matches( ignoredRegex ) )
+            if ( tmp.concat( SPACE ).matches( validationRegex ) )
             {
                 message = i18n.getString( "sqlquery_is_not_allowed" );
 
@@ -169,7 +161,7 @@
 
         message = sqlViewService.testSqlGrammar( sqlquery );
 
-        if ( !message.equals( "" ) )
+        if ( message != null )
         {
             return INPUT;
         }
@@ -181,20 +173,20 @@
     // Supportive methods
     // -------------------------------------------------------------------------
 
-    private String setUpIgnoredRegex()
+    private String getValidationRegex()
     {
         int i = 0;
-        int len = getIgnoredNameMap().size();
+        int len = PROTECTED_TABLES.size();
 
         StringBuffer ignoredRegex = new StringBuffer( PREFIX_REGEX_IGNORE_TABLES_QUERY );
 
-        for ( Map.Entry<String, String> entry : getIgnoredNameMap().entrySet() )
+        for ( String table : PROTECTED_TABLES )
         {
-            ignoredRegex.append( entry.getValue() );
+            ignoredRegex.append( table );
 
             if ( ++i < len )
             {
-                ignoredRegex.append( SEPERATE );
+                ignoredRegex.append( SEP );
             }
         }