Ignore:
Timestamp:
11/18/14 17:52:24 (10 years ago)
Author:
olhsha@mpi.nl
Message:

refactoring. Adding ALL as an access mode.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • DASISH/t5.6/backend/annotator-backend/trunk/annotator-backend/src/main/java/eu/dasish/annotation/backend/dao/impl/JdbcAnnotationDao.java

    r5661 r5836  
    5757        internalIdName = annotation_id;
    5858        resourceTableName = annotationTableName;
    59 
    6059    }
    6160
     
    7170        StringBuilder sql = new StringBuilder("SELECT ");
    7271        sql.append(principal_id).append(",").append(access).append(" FROM ").append(permissionsTableName).append(" WHERE ").append(annotation_id).append("  = ?");
    73         logger.debug("Parameter " + annotation_id + " := " + annotationID.intValue());
    7472        return this.loggedQuery(sql.toString(), principalsAccesssRowMapper, annotationID);
    7573    }
    76 
    77     @Override
    78     public Access getAccess(Number annotationID, Number principalID) {
    79 
     74   
     75    private List<Access> getAccessHelper(Number annotationID, Number principalID){
    8076        Map<String, Number> params = new HashMap<String, Number>();
    8177        params.put("annotationId", annotationID);
     
    8682                append(annotation_id).append("  =  :annotationId ").append(" AND ").
    8783                append(principal_id).append("  = :principalId").append(" LIMIT 1");
    88         List<Access> result = this.loggedQuery(sql.toString(), accessRowMapper, params);
    89         if (result.isEmpty()) {
    90             return null;
     84        return this.loggedQuery(sql.toString(), accessRowMapper, params);
     85    }
     86   
     87    @Override
     88    public boolean hasExplicitAccess(Number annotationID, Number principalID) {
     89        List<Access> result = this.getAccessHelper(annotationID, principalID);
     90        if (result == null || result.isEmpty()) {
     91            return false;
     92        } else {
     93            return true;
     94        }
     95    }
     96
     97    @Override
     98    public Access getAccess(Number annotationID, Number principalID) {
     99     List<Access> result = this.getAccessHelper(annotationID, principalID);   
     100        if (result == null || result.isEmpty()) {
     101            return Access.NONE;
    91102        } else {
    92103            return result.get(0);
    93104        }
    94105    }
    95     private final RowMapper<Access> accessRowMapper = new RowMapper<Access>() {
    96         @Override
    97         public Access mapRow(ResultSet rs, int rowNumber) throws SQLException {
    98             return Access.fromValue(rs.getString(access));
    99         }
    100     };
    101    
    102    
     106   
    103107
    104108    /////////////////////////////////////////////////////////////////////
     
    109113                append(annotation_id).append("  =  ? ").append(" LIMIT 1");
    110114        List<Access> result = this.loggedQuery(sql.toString(), public_RowMapper, annotationID);
    111         return result.get(0);
    112     }
    113    
    114    
    115     @Override
    116     public List<UUID> getExternalIdFromHeadline(String headline){
     115        if (result == null || result.isEmpty()) {
     116            return Access.NONE;
     117        } else {
     118            return result.get(0);
     119        }
     120
     121    }
     122
     123    @Override
     124    public List<UUID> getExternalIdFromHeadline(String headline) {
    117125        StringBuilder requestDB = new StringBuilder("SELECT ");
    118126        requestDB.append(external_id).append(" FROM ").append(annotationTableName).append(" WHERE ").append("'").append(headline).append("'").append("= ?");
    119         return this.loggedQuery(requestDB.toString(), externalIDRowMapper, headline);       
    120     }
    121    
    122     @Override
    123     public List<Number> getInternalIDsFromHeadline(String headline){
     127        return this.loggedQuery(requestDB.toString(), externalIDRowMapper, headline);
     128    }
     129
     130    @Override
     131    public List<Number> getInternalIDsFromHeadline(String headline) {
    124132        StringBuilder requestDB = new StringBuilder("SELECT ");
    125133        requestDB.append(annotation_id).append(" FROM ").append(annotationTableName).append(" WHERE ").append("'").append(headline).append("'").append("= ?");
    126         return this.loggedQuery(requestDB.toString(), internalIDRowMapper, headline);       
     134        return this.loggedQuery(requestDB.toString(), internalIDRowMapper, headline);
    127135    }
    128136
     
    157165    }
    158166
     167
    159168    ///////////////////////////////////////////////////////////////////////////////////
    160     @Override
    161     public List<Number> getAnnotationIDsForPermission(Number principalID, Access access) {
    162 
     169    //this method does not include all the annotations which are NOT in the pair with principal in this table
     170    // they have all default NONE access
     171    @Override
     172    public List<Number> getAnnotationIDsPermissionAtLeast(Number principalID, Access access) {
    163173        StringBuilder sql = new StringBuilder("SELECT ");
    164174        sql.append(annotation_id).append(" FROM ").append(permissionsTableName).append(" WHERE ").
     
    170180    /// helper ///
    171181    private String sqlAccessConstraint(String column, Access access) {
    172 
    173182        StringBuilder accessConstraint = new StringBuilder();
    174183        if (access.equals(Access.READ)) {
    175184            accessConstraint.append("(").append(column).append("  = '").append(Access.READ.value()).append("'");
    176             accessConstraint.append(" OR ").append(column).append("  = '").append(Access.WRITE.value()).append("')");
     185            accessConstraint.append(" OR ").append(column).append("  = '").append(Access.WRITE.value()).append("'");
     186            accessConstraint.append(" OR ").append(column).append("  = '").append(Access.ALL.value()).append("')");
    177187        } else {
    178             accessConstraint.append(column).append("  = '").append(access.value()).append("'");
    179         }
    180 
     188            if (access.equals(Access.WRITE)) {
     189                accessConstraint.append("(").append(column).append("  = '").append(Access.WRITE.value()).append("'");
     190                accessConstraint.append(" OR ").append(column).append("  = '").append(Access.ALL.value()).append("')");
     191            } else if (access.equals(Access.ALL)) {
     192                accessConstraint.append("(").append(column).append("  = '").append(Access.ALL.value()).append("')");
     193            } else {
     194                accessConstraint.append("(").append(column).append("  = '").append(Access.NONE.value()).append("')");
     195            }
     196        }
    181197        return accessConstraint.toString();
    182198    }
     
    184200    /////////////
    185201    @Override
    186     public List<Number> getAnnotationIDsForPublicAccess(Access access) {
     202    public List<Number> getAnnotationIDsPublicAtLeast(Access access) {
    187203        StringBuilder sql = new StringBuilder("SELECT ");
    188204        sql.append(annotation_id).append(" FROM ").append(annotationTableName).append(" WHERE ").
     
    190206        return this.loggedQuery(sql.toString(), internalIDRowMapper);
    191207    }
    192 
    193    
    194208
    195209    /////////////////////////////////////////
     
    317331            annotation.setTargets(null);
    318332            String externalId = rs.getString(external_id);
    319             annotation.setId(externalId);           
     333            annotation.setId(externalId);
    320334            annotation.setHref(externalIDtoHref(externalId));
    321335            annotation.setLastModified(timeStampToXMLGregorianCalendar(rs.getString(last_modified)));
     
    335349    }
    336350
    337     /////////////////////////////
    338 //    @Override
    339 //    public boolean annotationIsInUse(Number annotationID) {
    340 //        StringBuilder sqlNotebooks = new StringBuilder("SELECT ");
    341 //        sqlNotebooks.append(notebook_id).append(" FROM ").append(notebooksAnnotationsTableName).append(" WHERE ").append(annotation_id).append("= ? LIMIT 1");
    342 //        List<Number> resultNotebooks = this.loggedQuery(sqlNotebooks.toString(), notebookIDRowMapper, annotationID);
    343 //        if (resultNotebooks.size() > 0) {
    344 //            return true;
    345 //        }
    346 //
    347 //        StringBuilder sqlTargets = new StringBuilder("SELECT ");
    348 //        sqlTargets.append(target_id).append(" FROM ").append(annotationsTargetsTableName).append(" WHERE ").append(annotation_id).append("= ? LIMIT 1");
    349 //        List<Number> resultTargets = this.loggedQuery(sqlTargets.toString(), targetIDRowMapper, annotationID);
    350 //        if (resultTargets.size() > 0) {
    351 //            return true;
    352 //        }
    353 //
    354 //        StringBuilder sqlAccesss = new StringBuilder("SELECT ");
    355 //        sqlAccesss.append(principal_id).append(" FROM ").append(permissionsTableName).append(" WHERE ").append(annotation_id).append("= ? LIMIT 1");
    356 //        List<Number> resultAccesss = this.loggedQuery(sqlAccesss.toString(), principalIDRowMapper, annotationID);
    357 //        return (resultAccesss.size() > 0);
    358 //    }
     351   
    359352    @Override
    360353    public List<Number> getAnnotations(Number notebookID) {
     
    395388        return affectedRows;
    396389    }
    397    
    398      @Override
     390
     391    @Override
    399392    public int updateAnnotationHeadline(Number annotationID, String header) {
    400393        Map<String, Object> params = new HashMap<String, Object>();
     
    416409
    417410        String[] body = retrieveBodyComponents(annotation.getBody());
    418                
     411
    419412        Map<String, Object> params = new HashMap<String, Object>();
    420413        params.put("owner", newOwnerID);
     
    423416        params.put("headline", annotation.getHeadline());
    424417        params.put("isXml", annotation.getBody().getXmlBody() != null);
    425         params.put("externalId", annotation.getId());
     418        params.put("externalId", annotation.getId());       
     419        params.put("publicAccess", annotation.getPermissions().getPublic().value());
    426420        params.put("annotationId", annotationID);
    427421
     
    434428                append(last_modified).append("=  default,").
    435429                append(is_xml).append("= :isXml, ").
    436                 append(external_id).append("= :externalId").
    437                 append(" WHERE ").append(annotation_id).append("= :annotationId");
     430                append(external_id).append("= :externalId, ").
     431                append(public_).append("= :publicAccess").
     432                append(" WHERE ").append(annotation_id).append("= :annotationId");
    438433        int affectedRows = this.loggedUpdate(sql.toString(), params);
    439        
     434
    440435        return affectedRows;
    441436    }
    442437
    443438    @Override
    444     public int updateAnnotationPrincipalAccess(Number annotationID, Number principalID, Access access) {
     439    public int updatePermission(Number annotationID, Number principalID, Access access) {
    445440
    446441        Map<String, Object> params = new HashMap<String, Object>();
     
    460455
    461456    @Override
    462     public int updatePublicAttribute(Number annotationID, Access access) {
     457    public int updatePublicAccess(Number annotationID, Access access) {
    463458
    464459        Map<String, Object> params = new HashMap<String, Object>();
     
    486481        params.put("bodyText", body[0]);
    487482        params.put("bodyMimeType", body[1]);
    488         params.put("isXml", annotation.getBody().getXmlBody() != null);
     483        params.put("isXml", annotation.getBody().getXmlBody() != null);               
     484        params.put("publicAccess", annotation.getPermissions().getPublic().value());
    489485
    490486        StringBuilder sql = new StringBuilder("INSERT INTO ");
    491487        sql.append(annotationTableName).append("(").append(external_id).append(",").append(owner_id);
    492         sql.append(",").append(headline).append(",").append(body_text).append(",").append(body_mimetype).append(",").append(is_xml).
    493                 append(" ) VALUES (:externalId, :owner, :headline, :bodyText, :bodyMimeType, :isXml)");
     488        sql.append(",").append(headline).append(",").append(body_text).append(",").append(body_mimetype).append(",").append(is_xml).append(",").append(public_).
     489                append(" ) VALUES (:externalId, :owner, :headline, :bodyText, :bodyMimeType, :isXml, :publicAccess)");
    494490        int affectedRows = this.loggedUpdate(sql.toString(), params);
    495491        return getInternalID(externalID);
     
    509505    /////////////////////////////////////////////////////////////////////////////////////////
    510506    @Override
    511     public int addAnnotationPrincipalAccess(Number annotationID, Number principalID, Access access) {
     507    public int addPermission(Number annotationID, Number principalID, Access access) {
    512508
    513509        Map<String, Object> paramsAccesss = new HashMap<String, Object>();
     
    541537    //////////////////////////////////////////////////////
    542538    @Override
    543     public int deleteAnnotationPermissions(Number annotationID) {
     539    public int deletePermissions(Number annotationID) {
    544540        StringBuilder sqlAccesss = new StringBuilder("DELETE FROM ");
    545541        sqlAccesss.append(permissionsTableName).append(" WHERE ").append(annotation_id).append(" = ?");
    546542        return this.loggedUpdate(sqlAccesss.toString(), annotationID); // removed "access" rows
    547543    }
    548 
    549     ////////////////////////////////////////
    550     @Override
    551     public int deleteAnnotationFromAllNotebooks(Number annotationID) {
    552         StringBuilder sql = new StringBuilder("DELETE FROM ");
    553         sql.append(notebooksAnnotationsTableName).append(" WHERE ").append(annotation_id).append(" = ?");
    554         return this.loggedUpdate(sql.toString(), annotationID); // removed "notebook-annotation" rows
    555 
    556     }
    557 
     544   
    558545    //////////////////////////////////////////////////////
    559546    @Override
    560     public int deleteAnnotationPrincipalAccess(Number annotationID, Number principalID) {
     547    public int deletePermission(Number annotationID, Number principalID) {
    561548        Map<String, Number> params = new HashMap();
    562549        params.put("annotationId", annotationID);
     
    568555
    569556    }
     557
     558    ////////////////////////////////////////
     559    @Override
     560    public int deleteAnnotationFromAllNotebooks(Number annotationID) {
     561        StringBuilder sql = new StringBuilder("DELETE FROM ");
     562        sql.append(notebooksAnnotationsTableName).append(" WHERE ").append(annotation_id).append(" = ?");
     563        return this.loggedUpdate(sql.toString(), annotationID); // removed "notebook-annotation" rows
     564
     565    }
     566
     567   
    570568    /////////////// helpers //////////////////
    571569
Note: See TracChangeset for help on using the changeset viewer.