Changeset 6666 for TI01-discovery-API


Ignore:
Timestamp:
03/03/10 14:56:24 (9 years ago)
Author:
mnagni
Message:

Relocated in the project the message.properties file
Added (operator, id) attributes in the TermSearch? element
Implemented the TermSearch?.operator processing code
Implemented the update of the original_document result_count field after a succesful search

Location:
TI01-discovery-API/trunk/MEDINDiscoveryService/src/main
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/common/MessageFormatter.java

    r6456 r6666  
    6969         * */    
    7070        public String getFormattedText(NdgMessage bundleMsg) { 
     71                String ret = bundleMsg.getMsgKey(); 
    7172                try { 
    72                         return getFormattedText(bundleMsg, getResourceBundle()); 
    73                 } catch (ResourceNotAvailable e) { 
    74                         return bundleMsg.getMsgKey(); 
     73                        ret = getFormattedText(bundleMsg, getResourceBundle()); 
     74                } catch (Exception e) { 
     75                         
    7576                } 
     77                return ret; 
    7678        }                
    7779         
     
    9193                        formatter.setLocale(msg.getLocale()); 
    9294                formatter.applyPattern(resourceBundle.getString(msg.getMsgKey()));               
    93                 return formatter.format(msg.getMsgKey()); 
     95                return formatter.format(msg.getParams()); 
    9496        } 
    9597 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/common/NdgDictionary.java

    r6664 r6666  
    1212         
    1313        /** The name of the class containing the application messages*/ 
    14         public final static String RESOURCE_BUNDLE = "messages";         
     14        public final static String RESOURCE_BUNDLE = "ndg.common.messages";      
    1515         
    1616        /** JNDI connection */ 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/services/discovery/DiscoveryServiceMEDINSkeleton.java

    r6664 r6666  
    1010import ndg.common.exception.NdgSQLException; 
    1111import ndg.common.exception.ResourceNotAvailable; 
    12 import ndg.services.discovery.exception.DiscoveryDBException; 
    1312import ndg.services.discovery.exception.DiscoveryWSException; 
    1413import ndg.services.discovery.medin.DiscoveryBasic; 
     
    164163                        responseContent.setStatusMessage(statusMessage); 
    165164                        responseContent.setResultId(0); // not used at the moment 
    166                 } 
    167                  
     165                }                
    168166                return response;         
    169167        } 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/services/discovery/model/SearchAgent.java

    r6659 r6666  
    22 
    33import java.sql.Connection; 
     4import java.sql.PreparedStatement; 
    45import java.sql.ResultSet; 
    56import java.sql.SQLException; 
     7import java.sql.Statement; 
    68import java.util.ArrayList; 
     9import java.util.Arrays; 
     10import java.util.Collections; 
     11import java.util.Comparator; 
    712import java.util.List; 
    813 
     
    3439public class SearchAgent extends CommonMethods { 
    3540 
     41        private String updateCounterSQL = "UPDATE original_document SET resultset_count = ? WHERE original_document_filename = ?"; 
     42        private String getValue = "SELECT resultset_count as counter from original_document"; 
     43         
     44        private enum OPERATOR {AND, OR, NOT}; 
     45         
    3646        private static Logger logger = Logger.getLogger(SearchAgent.class.getName()); 
    3747 
     
    109119                PresentAgent present = new PresentAgent(); 
    110120                res = present.doPresent(conn, toFilter, searchType.getRetrieveCriteria()); 
     121                updateCountVal(toFilter); 
    111122                return res; 
    112123        } 
     
    299310                        return; 
    300311 
     312                List<TermSearchType> terms = Arrays.asList(termsType); 
     313                Collections.sort(terms, new TermSearchTypeComparator()); 
    301314                boolean secondPass = false; 
    302                 int queryIndex = 0; 
    303                 for (TermSearchType termType : termsType) { 
    304                         checkWHERE_AND(whereSQL, secondPass); 
     315                int queryIndex = 0;  
     316                for (TermSearchType termType : terms) { 
    305317                        String term = termType.getTerm(); 
    306318                        DiscoveryDictionary.TermTarget termTarget = DiscoveryDictionary.getTermType(termType.getTermTarget()); 
     
    330342                        fromSQL.append("') AS query" + Integer.toString(queryIndex)); 
    331343 
     344                        if (secondPass && queryIndex < term.length()) { 
     345                                OPERATOR operator = getOperator(termType.getOperator()); 
     346                                whereSQL.append(" "); 
     347                                whereSQL.append(operator.name()); 
     348                                whereSQL.append(" ");                            
     349                        }                        
     350                         
    332351                        whereSQL.append(" query" + Integer.toString(queryIndex) + " @@ ("); 
    333352                        whereSQL.append(termTarget.fieldName()); 
    334                         whereSQL.append(") "); 
     353                        whereSQL.append(") ");           
     354                         
    335355                        secondPass = true; 
    336356                        queryIndex++; 
     
    466486                whereSQL.append("' "); 
    467487        } 
     488         
     489 
     490        /** 
     491         * Compares two {@link TermSearchType}s according to their {@link Term#getId()} 
     492         **/ 
     493        private class TermSearchTypeComparator implements Comparator<TermSearchType> { 
     494                public int compare(TermSearchType o1, TermSearchType o2) { 
     495                        try { 
     496                                Short one = new Short(o1.getId()); 
     497                                Short two = new Short(o2.getId()); 
     498                                return one.compareTo(two); 
     499                        } catch (Exception e) { 
     500                                return 0; 
     501                        } 
     502                }                
     503        } 
     504 
     505        private OPERATOR getOperator(String operator) { 
     506                OPERATOR ret = OPERATOR.AND; 
     507                if (operator == null) 
     508                        return ret; 
     509                for (OPERATOR item : OPERATOR.values()) { 
     510                        if (item.name().equals(operator)) { 
     511                                return item;                             
     512                        }                        
     513                } 
     514                return ret; 
     515        } 
     516         
     517        private void updateCountVal(List<String> documentIDs) throws NdgSQLException, ResourceNotAvailable {             
     518                Connection conn = DiscoveryBasic.getInstance().getConnection(); 
     519                List<OriginalDocument> searchResult = null; 
     520                boolean commit = false; 
     521                try { 
     522                        conn.setAutoCommit(false); 
     523                        for (String docId : documentIDs) { 
     524                                executeUpdateCountVal(conn, docId); 
     525                        }                        
     526                        commit = true; 
     527                } catch (SQLException e) { 
     528                        // NdgMessage msg = new NdgMessage("sql.resultset.parsing.error", 
     529                        // new Object[] { sqlQuery }); 
     530                        throw new NdgSQLException(e); 
     531                } finally { 
     532                        commitOrRollback(conn, commit); 
     533                } 
     534        } 
     535         
     536        private void executeUpdateCountVal(Connection conn, String docId) throws NdgSQLException { 
     537                try {                    
     538                        Statement statement = conn.createStatement(); 
     539                        ResultSet rs = statement.executeQuery(getValue); 
     540                        if(!rs.next()) 
     541                                return; 
     542                        Integer counter = rs.getInt("counter"); 
     543                         
     544                        PreparedStatement updateCounter = conn.prepareStatement(updateCounterSQL); 
     545                        updateCounter.setInt(1, counter+1); 
     546                        updateCounter.setString(2, docId); 
     547                        updateCounter.execute(); 
     548                } catch (SQLException e) { 
     549                        throw new NdgSQLException(e); 
     550                } 
     551 
     552        } 
    468553} 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/resources/META-INF/DiscoverySchema.xsd

    r6658 r6666  
    55                (NERC Earth Observation Data Centre) 
    66        --> 
    7 <xs:schema targetNamespace="http://medin.discovery.services.ndg/schema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://medin.discovery.services.ndg/schema"> 
     7<xs:schema targetNamespace="http://medin.discovery.services.ndg/schema" 
     8        elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" 
     9        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     10        xmlns:tns="http://medin.discovery.services.ndg/schema"> 
    811        <!-- Request elements --> 
    912        <xs:element name="DoSearch" type="tns:SearchType"/> 
     
    5659                                <xs:complexType> 
    5760                                        <xs:sequence> 
    58                                                 <xs:element name="TermSearch" type="tns:TermSearchType" minOccurs="0" maxOccurs="unbounded"> 
     61                                                <xs:element name="TermSearch" type="tns:TermSearchType" minOccurs="0" 
     62                                                        maxOccurs="unbounded"> 
    5963                                                        <xs:annotation> 
    6064                                                                <xs:documentation>Can have multiple term searches - will treat multiple termSearches in "AND" combination, unless multiple instances of same termTarget, in which case "OR" combination is used for those with the same termTarget.</xs:documentation> 
     
    197201        <xs:complexType name="TermSearchType"> 
    198202                <xs:sequence> 
    199                         <xs:element name="Term" type="xs:string"> 
     203                        <xs:element name="Term" type="xs:string" minOccurs="0"> 
    200204                                <xs:annotation> 
    201205                                        <xs:documentation>String(s) used in search. Whitespace between strings interpreted as OR combinations of those strings, unless "+" used to combine them, in which case AND combination. </xs:documentation> 
     
    208212                        </xs:element> 
    209213                </xs:sequence> 
     214                <xs:attribute name="id" use="required" type="xs:short"> </xs:attribute> 
     215                <xs:attribute name="operator" type="xs:string"> </xs:attribute> 
    210216        </xs:complexType> 
    211217        <xs:complexType name="TemporalType"> 
     
    262268                </xs:sequence> 
    263269        </xs:complexType> 
     270 
    264271        <xs:complexType name="ReturnSimpleType"> 
    265272                <xs:complexContent> 
     
    273280                                        <xs:element name="AdditionalInformation" type="tns:CustomInfo"/> 
    274281                                        <xs:element name="Title" type="xs:string" minOccurs="0"/> 
    275                                         <xs:element name="OrderedField" type="tns:OrderingMetricType" minOccurs="0" maxOccurs="unbounded"> 
     282                                        <xs:element name="OrderedField" type="tns:OrderingMetricType" minOccurs="0" 
     283                                                maxOccurs="unbounded"> 
    276284                                                <xs:annotation> 
    277285                                                        <xs:documentation>Name value pair(s) representing field(s) corresoponding to orderBy fields in search request. </xs:documentation> 
     
    287295                                <xs:sequence> 
    288296                                        <xs:element name="Title" type="xs:string" minOccurs="0"/> 
    289                                         <xs:element name="OrderedField" type="tns:OrderingMetricType" minOccurs="0" maxOccurs="unbounded"> 
     297                                        <xs:element name="OrderedField" type="tns:OrderingMetricType" minOccurs="0" 
     298                                                maxOccurs="unbounded"> 
    290299                                                <xs:annotation> 
    291300                                                        <xs:documentation>Name value pair(s) representing field(s) corresoponding to orderBy fields in search request. </xs:documentation> 
     
    293302                                        </xs:element> 
    294303                                        <xs:element name="Abstract" type="xs:string" minOccurs="0"/> 
    295                                         <xs:element name="Temporal" type="tns:TemporalType" minOccurs="0" maxOccurs="unbounded"/> 
    296                                         <xs:element name="Spatial" type="tns:SpatialType" minOccurs="0" maxOccurs="unbounded"/> 
     304                                        <xs:element name="Temporal" type="tns:TemporalType" minOccurs="0" 
     305                                                maxOccurs="unbounded"/> 
     306                                        <xs:element name="Spatial" type="tns:SpatialType" minOccurs="0" 
     307                                                maxOccurs="unbounded"/> 
    297308                                </xs:sequence> 
    298309                        </xs:extension> 
     
    305316                                        <xs:element name="AdditionalInformation" type="tns:CustomInfo"/> 
    306317                                        <xs:element name="Title" type="xs:string" minOccurs="0"/> 
    307                                         <xs:element name="OrderedField" type="tns:OrderingMetricType" minOccurs="0" maxOccurs="unbounded"> 
     318                                        <xs:element name="OrderedField" type="tns:OrderingMetricType" minOccurs="0" 
     319                                                maxOccurs="unbounded"> 
    308320                                                <xs:annotation> 
    309321                                                        <xs:documentation>Name value pair(s) representing field(s) corresoponding to orderBy fields in search request. </xs:documentation> 
     
    311323                                        </xs:element> 
    312324                                        <xs:element name="Abstract" type="xs:string" minOccurs="0"/> 
    313                                         <xs:element name="Temporal" type="tns:TemporalType" minOccurs="0" maxOccurs="unbounded"/> 
    314                                         <xs:element name="Spatial" type="tns:SpatialType" minOccurs="0" maxOccurs="unbounded"/> 
     325                                        <xs:element name="Temporal" type="tns:TemporalType" minOccurs="0" 
     326                                                maxOccurs="unbounded"/> 
     327                                        <xs:element name="Spatial" type="tns:SpatialType" minOccurs="0" 
     328                                                maxOccurs="unbounded"/> 
    315329                                        <xs:element name="Document" type="xs:string"> 
    316330                                                <xs:annotation> 
     
    333347                                <xs:choice> 
    334348                                        <xs:sequence> 
    335                                                 <xs:element name="DocumentSimple" type="tns:ReturnSimpleType" maxOccurs="unbounded"/> 
    336                                         </xs:sequence> 
    337                                         <xs:sequence> 
    338                                                 <xs:element name="DocumentFull" type="tns:ReturnFullType" maxOccurs="unbounded"/> 
    339                                         </xs:sequence> 
    340                                         <xs:sequence> 
    341                                                 <xs:element name="DocumentBrief" type="tns:ReturnBriefType" maxOccurs="unbounded"/> 
    342                                         </xs:sequence> 
    343                                         <xs:sequence> 
    344                                                 <xs:element name="DocumentSummary" type="tns:ReturnSummaryType" maxOccurs="unbounded"/> 
     349                                                <xs:element name="DocumentSimple" type="tns:ReturnSimpleType" 
     350                                                        maxOccurs="unbounded"/> 
     351                                        </xs:sequence> 
     352                                        <xs:sequence> 
     353                                                <xs:element name="DocumentFull" type="tns:ReturnFullType" 
     354                                                        maxOccurs="unbounded"/> 
     355                                        </xs:sequence> 
     356                                        <xs:sequence> 
     357                                                <xs:element name="DocumentBrief" type="tns:ReturnBriefType" 
     358                                                        maxOccurs="unbounded"/> 
     359                                        </xs:sequence> 
     360                                        <xs:sequence> 
     361                                                <xs:element name="DocumentSummary" type="tns:ReturnSummaryType" 
     362                                                        maxOccurs="unbounded"/> 
    345363                                        </xs:sequence> 
    346364                                </xs:choice> 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/resources/ndg/common/messages.properties

    r6664 r6666  
    77invocation.error = The command {0} generated an unexpected exception 
    88context.not.available = No context is available 
    9 seach.successful = Successful. 
     9search.successful = Successful. 
    1010present.successful = Successful. 
    1111search.no.results = Search was successful but generated no results. 
Note: See TracChangeset for help on using the changeset viewer.