Changeset 1205


Ignore:
Timestamp:
12/04/11 23:05:59 (9 years ago)
Author:
philsmart
Message:
 
Location:
raptor-mua/trunk
Files:
37 added
33 edited

Legend:

Unmodified
Added
Removed
  • raptor-mua/trunk/pom.xml

    r1171 r1205  
    230230            <groupId>commons-dbcp</groupId> 
    231231            <artifactId>commons-dbcp</artifactId> 
    232             <version>1.2.2</version> 
     232            <version>1.3</version> 
    233233        </dependency> 
    234234 
     
    303303                <version>5.1.17</version> 
    304304        </dependency> 
     305        
     306       <!-- testing dependencies --> 
     307        <dependency> 
     308            <groupId>org.springframework</groupId> 
     309            <artifactId>spring-test</artifactId> 
     310            <version>${spring.version}</version> 
     311            <scope>test</scope> 
     312        </dependency> 
     313        
    305314    </dependencies> 
    306315 
     
    425434 
    426435                        <manifest> 
     436                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
    427437                            <mainClass>uk.ac.cardiff.raptormua.server.RunServer</mainClass> 
    428438                            <addClasspath>true</addClasspath> 
  • raptor-mua/trunk/src/main/config/attribute-association.xml

    r807 r1205  
    3737        <property name="dataConnector"><ref bean="ldapDataConnector"/></property> 
    3838        <!-- add the filter here, where [principal] is replaced by the actual principal value extracted per event --> 
    39         <property name="searchFilterTemplate"><value>cn=[principal]</value></property> 
     39        <property name="searchTemplate"><value>cn=[principal]</value></property> 
    4040        <property name="enabled"><value>true</value></property> 
    4141        <property name="classToAdd"><value type="java.lang.Class">uk.ac.cardiff.model.event.auxiliary.PrincipalInformation</value></property> 
     
    6060        <property name="dataConnector"><ref bean="ldapDataConnector"/></property> 
    6161        <!-- add the filter here, where [principal] is replaced by the actual principal value extracted per event --> 
    62         <property name="searchFilterTemplate"><value>CardiffIDManParentIdentityUid=[principal]</value></property> 
     62        <property name="searchTemplate"><value>CardiffIDManParentIdentityUid=[principal]</value></property> 
    6363        <property name="enabled"><value>true</value></property> 
    6464        <property name="classToAdd"><value type="java.lang.Class">uk.ac.cardiff.model.event.auxiliary.PrincipalInformation</value></property> 
     
    7878    </bean> 
    7979 
    80  
    81  
    82  
    83         <!-- data connectors. Currently only LDAP. Static Singleton Connector  --> 
    84     <bean id="ldapDataConnector" class="uk.ac.cardiff.raptor.event.expansion.connector.LdapDataConnector"> 
     80   <bean id="ldapDataConnector" class="uk.ac.cardiff.raptor.event.expansion.connector.LdapDataConnector"> 
    8581         <property name="poolMaxIdle"><value>10</value></property> 
    8682         <property name="poolInitIdleCapacity"><value>10</value></property> 
     
    9591 
    9692 
     93    <bean id="databaseConntector" class="uk.ac.cardiff.raptor.event.expansion.connector.RDBMSDataConnector">          
     94         <property name="cacheResults"><value>true</value></property> 
     95         <property name="cacheTimeoutMs"><value>86400000</value></property> 
     96         <property name="dataSource"> 
     97            <bean id="dataSourceConnectionProperties" class="org.apache.commons.dbcp.BasicDataSource"> 
     98                <property name="driverClassName" value="org.postgresql.Driver"/> 
     99                <property name="url"  value="jdbc:postgresql://localhost/identities"/> 
     100                <property name="username"  value="postgres"/> 
     101                <property name="password"  value=""/> 
     102            </bean> 
     103         </property> 
     104    </bean> 
     105 
     106 
    97107</beans> 
  • raptor-mua/trunk/src/main/config/batch-event-parse.xml

    r1190 r1205  
    2929 
    3030                                <bean id="shib13Proxy" class="uk.ac.cardiff.raptor.parse.external.file.LogFileParser"> 
     31                    <property name="enabled" value="true"/> 
    3132                                        <property name="eventHandler"><ref bean="memoryEventHandler"></ref></property> 
    3233                                        <property name="eventTypeFriendlyName"> 
     
    5657 
    5758               <bean id="ezproxyLFP" class="uk.ac.cardiff.raptor.parse.external.file.LogFileParser"> 
     59                     <property name="enabled" value="true"/> 
    5860                    <property name="eventHandler"><ref bean="memoryEventHandler"></ref></property> 
    5961                    <property name="eventTypeFriendlyName"> 
     
    9193 
    9294                <bean id="shibbolethAuditLFP" class="uk.ac.cardiff.raptor.parse.external.file.LogFileParser"> 
     95                    <property name="enabled" value="true"/> 
    9396                                        <property name="eventHandler"><ref bean="memoryEventHandler"></ref></property> 
    9497                                        <property name="eventTypeFriendlyName"> 
     
    121124        </bean> 
    122125 
    123         <!-- Create the entry handler --> 
     126        <!-- Create the event handler --> 
    124127        <bean name="memoryEventHandler" class="uk.ac.cardiff.raptor.store.impl.LogFileIncrementalMemoryEventHandler"></bean> 
    125128 
  • raptor-mua/trunk/src/main/config/database.xml

    r1144 r1205  
    1818                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    1919                <property name="dataSource"> 
    20                         <ref local="muac3p0DataSourceMySQL" /> 
     20                        <ref local="muac3p0DataSource" /> 
    2121                </property> 
    2222                <property name="hibernateProperties"> 
    2323                        <props> 
    24                                  <!--  <prop key="hibernate.dialect"> org.hibernate.dialect.PostgreSQLDialect</prop>--> 
     24                                  <prop key="hibernate.dialect"> org.hibernate.dialect.PostgreSQLDialect</prop> 
    2525                             <!--<prop key="hibernate.dialect"> org.hibernate.dialect.HSQLDialect</prop>--> 
    26                  <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</prop> 
    27                                 <prop key="hibernate.show_sql">true</prop> 
     26                <!--  <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</prop>--> 
     27                                <prop key="hibernate.show_sql">false</prop> 
    2828                                <prop key="hibernate.hbm2ddl.auto">update</prop> 
    2929                        </props> 
  • raptor-mua/trunk/src/main/config/logging.xml

    r912 r1205  
    4141  </appender> 
    4242 
    43   <logger name="org.springframework" level="ERROR"> 
     43  <logger name="org.springframework" level="INFO"> 
    4444    <appender-ref ref="stdout"/> 
    4545  </logger> 
    4646  <logger name="uk.ac.cardiff" level="debug"> 
    4747    <appender-ref ref="stdout"/> 
    48     <appender-ref ref="FILE"/> 
    4948  </logger> 
    50   <logger name="org.mortbay" level="INFO"> 
     49  <logger name="org.mortbay" level="ERROR"> 
    5150    <appender-ref ref="stdout"/> 
    52     <appender-ref ref="FILE"/> 
    5351  </logger> 
    5452  <logger name="org.hibernate" level="INFO"> 
    5553    <appender-ref ref="stdout"/> 
    56     <appender-ref ref="FILE"/> 
    5754  </logger> 
    5855 
    59   <logger name="  org.apache.cxf" level="ERROR"> 
     56  <logger name="org.apache.cxf" level="INFO"> 
    6057    <appender-ref ref="stdout"/> 
    61     <appender-ref ref="FILE"/> 
    6258  </logger> 
    6359 
  • raptor-mua/trunk/src/main/config/mua-core.xml

    r1191 r1205  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <!-- 
    3  
    4     Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> 
    5  
    6     Licensed under the Apache License, Version 2.0 (the "License"); 
    7     you may not use this file except in compliance with the License. 
    8     You may obtain a copy of the License at 
    9  
    10             http://www.apache.org/licenses/LICENSE-2.0 
    11  
    12     Unless required by applicable law or agreed to in writing, software 
    13     distributed under the License is distributed on an "AS IS" BASIS, 
    14     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    15     See the License for the specific language governing permissions and 
    16     limitations under the License. 
    17  
    18 --> 
    19 <beans xmlns="http://www.springframework.org/schema/beans" 
    20         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    21         xmlns:jaxws="http://cxf.apache.org/jaxws" 
    22         xsi:schemaLocation=" 
     2<!-- Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> Licensed under the Apache License, Version 2.0 (the "License");  
     3    you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0  
     4    Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS  
     5    IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language  
     6    governing permissions and limitations under the License. --> 
     7<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     8    xmlns:jaxws="http://cxf.apache.org/jaxws" 
     9    xsi:schemaLocation=" 
    2310        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    2411        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> 
     
    3017 
    3118 
    32         <!--  WEB SERVICE ENDPOINT INTERFACE (SEI) SETUP --> 
    33         <jaxws:endpoint 
    34           id="muaEndpoint" 
    35           implementor="#muaEndpointInterface" 
    36           address="/MultiUnitAggregator" > 
    37                 <jaxws:serviceFactory> 
    38                         <ref bean='jaxws-and-aegis-service-factory' /> 
    39                 </jaxws:serviceFactory> 
    40  
    41  
    42           </jaxws:endpoint> 
    43  
    44           <bean id="muaEndpointInterface" class="uk.ac.cardiff.raptormua.wsinterface.impl.MultiUnitAggregatorImpl"> 
    45                 <property name="processService"> 
    46                         <ref bean="MUAProcess"></ref> 
    47                 </property> 
    48         </bean> 
    49  
    50         <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" 
    51                 scope="prototype" /> 
    52         <bean id="jaxws-and-aegis-service-factory" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" 
    53                 scope="prototype"> 
    54                 <property name="dataBinding" ref="aegisBean" /> 
    55                 <property name="properties"> 
    56                         <map> 
    57                                 <entry key="writeXsiType"> 
    58                                         <value type="java.lang.Boolean">true</value> 
    59                                 </entry> 
    60                                 <entry key="overrideTypesList"> 
    61                                         <list> 
    62                                         <!--  THIS LIST IS IMPORTANT, it exposes these classes to the aegis XSD creator 
    63                                         so we can output the generic Entry class in lists in the Collector Service Endpoint Class 
    64                                         but actually output any of its subclasses. Hence, this is a way of dealing with 
    65                                         inheritence in CXF and aegis --> 
    66                                                 <value>uk.ac.cardiff.model.event.AuthenticationEvent</value> 
    67                                                 <value>uk.ac.cardiff.model.event.ShibbolethIdpAuthenticationEvent</value> 
    68                                                 <value>uk.ac.cardiff.model.event.EzproxyAuthenticationEvent</value> 
    69                                                 <value>uk.ac.cardiff.model.event.OpenathenslaAuthenticationEvent</value> 
    70                                         </list> 
    71                                 </entry> 
    72                         </map> 
    73                 </property> 
    74         </bean> 
    75  
    76         <!--  DONE --> 
    77  
    78         <bean id="MUAProcess" class="uk.ac.cardiff.raptormua.service.impl.MUAProcessImpl"> 
    79                 <property name="engine"> 
    80                         <ref bean="MUAEngine"></ref> 
    81                 </property> 
    82                 <property name="fileUploadEngine"> 
    83                     <ref bean="fileUploadFromDirectory"/> 
    84                 </property> 
    85         </bean> 
     19    <!-- WEB SERVICE ENDPOINT INTERFACE (SEI) SETUP --> 
     20    <jaxws:endpoint id="muaEndpoint" implementor="#muaEndpointInterface" address="/MultiUnitAggregator"> 
     21        <jaxws:serviceFactory> 
     22            <ref bean='jaxws-and-aegis-service-factory' /> 
     23        </jaxws:serviceFactory> 
     24 
     25 
     26    </jaxws:endpoint> 
     27 
     28    <bean id="muaEndpointInterface" class="uk.ac.cardiff.raptormua.wsinterface.impl.MultiUnitAggregatorImpl"> 
     29        <property name="processService"> 
     30            <ref bean="MUAProcess"></ref> 
     31        </property> 
     32    </bean> 
     33 
     34    <bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" scope="prototype" /> 
     35    <bean id="jaxws-and-aegis-service-factory" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" scope="prototype"> 
     36        <property name="dataBinding" ref="aegisBean" /> 
     37        <property name="properties"> 
     38            <map> 
     39                <entry key="writeXsiType"> 
     40                    <value type="java.lang.Boolean">true</value> 
     41                </entry> 
     42                <entry key="overrideTypesList"> 
     43                    <list> 
     44                        <!-- THIS LIST IS IMPORTANT, it exposes these classes to the aegis XSD creator so we can output the  
     45                            generic Entry class in lists in the Collector Service Endpoint Class but actually output any of its subclasses. Hence, this  
     46                            is a way of dealing with inheritence in CXF and aegis --> 
     47                        <value>uk.ac.cardiff.model.event.AuthenticationEvent</value> 
     48                        <value>uk.ac.cardiff.model.event.ShibbolethIdpAuthenticationEvent</value> 
     49                        <value>uk.ac.cardiff.model.event.EzproxyAuthenticationEvent</value> 
     50                        <value>uk.ac.cardiff.model.event.OpenathenslaAuthenticationEvent</value> 
     51                    </list> 
     52                </entry> 
     53            </map> 
     54        </property> 
     55    </bean> 
     56 
     57    <!-- DONE --> 
     58 
     59    <bean id="MUAProcess" class="uk.ac.cardiff.raptormua.service.impl.MUAProcessImpl"> 
     60        <property name="engine"> 
     61            <ref bean="MUAEngine"></ref> 
     62        </property> 
     63        <property name="fileUploadEngine"> 
     64            <ref bean="fileUploadFromDirectory" /> 
     65        </property> 
     66    </bean> 
    8667 
    8768    <bean id="fileUploadFromDirectory" class="uk.ac.cardiff.raptormua.upload.FileUploadEngine"> 
    88         <property name="enabled" value="true"/> 
     69        <property name="enabled" value="true" /> 
    8970        <property name="uploadDirectories"> 
    9071            <list> 
    91                     <bean id="shibUploadDirectory" class="uk.ac.cardiff.raptormua.upload.UploadDirectory"> 
    92                        <property name="allowedFileExtensions"> 
    93                            <list> 
    94                                <value>txt</value> 
    95                                <value>log</value> 
    96                            </list> 
    97                        </property> 
    98                        <property name="uploadDirectory" value="/Users/philsmart/Documents/DataSets/Logs/batch/shib2/"/> 
    99                        <property name="eventType"><value>SHIBBOLETH2</value></property> 
    100                     </bean> 
     72                <bean id="shibUploadDirectory" class="uk.ac.cardiff.raptormua.upload.UploadDirectory"> 
     73                    <property name="allowedFileExtensions"> 
     74                        <list> 
     75                            <value>txt</value> 
     76                            <value>log</value> 
     77                        </list> 
     78                    </property> 
     79                    <property name="uploadDirectory" value="/Users/philsmart/Documents/DataSets/Logs/batch/shib2/" /> 
     80                    <property name="eventType"> 
     81                        <value>SHIBBOLETH2</value> 
     82                    </property> 
     83                </bean> 
    10184                <bean id="shib13UploadDirectory" class="uk.ac.cardiff.raptormua.upload.UploadDirectory"> 
    102                    <property name="allowedFileExtensions"> 
    103                        <list> 
    104                            <value>txt</value> 
    105                            <value>log</value> 
    106                        </list> 
    107                    </property> 
    108                    <property name="uploadDirectory" value="/Users/philsmart/Documents/DataSets/Logs/batch/shib13/"/> 
    109                    <property name="eventType"><value>SHIBBOLETH13</value></property> 
     85                    <property name="allowedFileExtensions"> 
     86                        <list> 
     87                            <value>txt</value> 
     88                            <value>log</value> 
     89                        </list> 
     90                    </property> 
     91                    <property name="uploadDirectory" value="/Users/philsmart/Documents/DataSets/Logs/batch/shib13/" /> 
     92                    <property name="eventType"> 
     93                        <value>SHIBBOLETH13</value> 
     94                    </property> 
    11095                </bean> 
    11196                <bean id="ezproxyUploadDirectory" class="uk.ac.cardiff.raptormua.upload.UploadDirectory"> 
    112                    <property name="allowedFileExtensions"> 
    113                        <list> 
    114                            <value>txt</value> 
    115                            <value>log</value> 
    116                        </list> 
    117                    </property> 
    118                    <property name="uploadDirectory" value="/Users/philsmart/Documents/DataSets/Logs/batch/ezproxy/"/> 
    119                    <property name="eventType"><value>EZPROXY</value></property> 
     97                    <property name="allowedFileExtensions"> 
     98                        <list> 
     99                            <value>txt</value> 
     100                            <value>log</value> 
     101                        </list> 
     102                    </property> 
     103                    <property name="uploadDirectory" value="/Users/philsmart/Documents/DataSets/Logs/batch/ezproxy/" /> 
     104                    <property name="eventType"> 
     105                        <value>EZPROXY</value> 
     106                    </property> 
    120107                </bean> 
    121108            </list> 
     
    123110    </bean> 
    124111 
    125         <!-- 
    126                 this bean config kicks of the singleton engine instance which is then 
    127                 used by all services of the MUA 
    128         --> 
    129         <bean id="MUAEngine" class="uk.ac.cardiff.raptormua.engine.MUAEngine"> 
    130         <property name="eventReleaseClient"><ref bean="eventReleaseClient"></ref></property> 
    131                 <property name="statisticsHandler"><ref bean="statisticalUnits"/></property> 
    132                 <property name="storageEngine"><ref bean="storageEngine"></ref></property> 
    133         <property name="resourceStorageEngine"><ref bean="resourceStorageEngine"></ref></property> 
    134                 <property name="muaMetadata"><ref bean="MUAMetadata"></ref></property> 
    135                 <property name="capabilitiesConstructor"><ref bean="capabilitiesConstructor"/></property> 
    136                 <property name="dataAccessRegister"><ref bean="dataAccessRegister"></ref></property> 
    137                 <property name="maxReleaseEventSize"><value>2000</value></property> <!-- Max Size is 3000 --> 
    138         </bean> 
     112    <!-- this bean config kicks of the singleton engine instance which is then used by all services of the MUA --> 
     113    <bean id="MUAEngine" class="uk.ac.cardiff.raptormua.engine.MUAEngine"> 
     114        <property name="eventReleaseClient"> 
     115            <ref bean="eventReleaseClient"></ref> 
     116        </property> 
     117        <property name="statisticsHandler"> 
     118            <ref bean="statisticalUnits" /> 
     119        </property> 
     120        <property name="storageEngine"> 
     121            <ref bean="storageEngine"></ref> 
     122        </property> 
     123        <property name="resourceStorageEngine"> 
     124            <ref bean="resourceStorageEngine"></ref> 
     125        </property> 
     126        <property name="muaMetadata"> 
     127            <ref bean="MUAMetadata"></ref> 
     128        </property> 
     129        <property name="capabilitiesConstructor"> 
     130            <ref bean="capabilitiesConstructor" /> 
     131        </property> 
     132        <property name="dataAccessRegister"> 
     133            <ref bean="dataAccessRegister"></ref> 
     134        </property> 
     135        <property name="maxReleaseEventSize"> 
     136            <value>2000</value> 
     137        </property> <!-- Max Size is 3000 --> 
     138    </bean> 
    139139 
    140140    <bean id="capabilitiesConstructor" class="uk.ac.cardiff.raptormua.engine.CapabilitiesConstructor"> 
    141         <property name="cacheEnabled"><value>true</value></property> 
    142          <property name="cacheTimeoutMs"><value>1800000</value></property> 
     141        <property name="cacheEnabled"> 
     142            <value>true</value> 
     143        </property> 
     144        <property name="cacheTimeoutMs"> 
     145            <value>1800000</value> 
     146        </property> 
    143147        <property name="excludeFieldNames"> 
    144148            <set> 
     
    157161    </bean> 
    158162 
     163    <bean id="statisticalUnits" class="uk.ac.cardiff.raptormua.engine.statistics.StatisticsHandler"> 
     164        <property name="statisticRegistry"> 
     165            <ref bean="statisticRegistry" /> 
     166        </property> 
     167 
     168    </bean> 
     169 
     170    <!-- Handles all statistical units defined --> 
     171    <bean id="statisticRegistry" class="uk.ac.cardiff.raptormua.engine.statistics.ContextAwareStatisticRegistry"> 
     172        <property name="automaticallyFindStatsiticsToLoad" value="true" /> 
     173        <property name="processorRegistry"> 
     174            <ref bean="processorRegistry" /> 
     175        </property> 
     176    </bean> 
     177 
     178 
    159179 
    160180    <bean id="eventReleaseEngine" class="uk.ac.cardiff.raptor.remoting.client.EventReleaseEngine"> 
    161         <property name="attributeFilterEngine"><ref bean="attributeFilterEngine"/></property> 
    162         <property name="serviceEndpointInterface"><ref bean="serviceEndpointInterface"/></property> 
    163     </bean> 
    164  
    165     <bean id="attributeFilterEngine" class="uk.ac.cardiff.raptor.attribute.filtering.AttrributeFilterEngine"/> 
    166  
    167  
    168         <!-- release trigger setup --> 
     181        <property name="attributeFilterEngine"> 
     182            <ref bean="attributeFilterEngine" /> 
     183        </property> 
     184        <property name="serviceEndpointInterface"> 
     185            <ref bean="serviceEndpointInterface" /> 
     186        </property> 
     187    </bean> 
     188 
     189    <bean id="attributeFilterEngine" class="uk.ac.cardiff.raptor.attribute.filtering.AttrributeFilterEngine" /> 
     190 
     191 
     192    <!-- release trigger setup --> 
    169193    <bean id="muaReleaseQuickTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
    170194        <property name="jobDetail"> 
     
    175199    </bean> 
    176200 
    177     <bean id="muaReleaseJobDetail" 
    178         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     201    <bean id="muaReleaseJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    179202        <property name="targetObject"> 
    180203            <ref bean="MUAProcess" /> 
     
    187210        </property> 
    188211    </bean> 
    189      
    190         <!-- large file upload trigger --> 
     212 
     213    <!-- large file upload trigger --> 
    191214    <bean id="muaFileUploadQuickTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
    192215        <property name="jobDetail"> 
     
    197220    </bean> 
    198221 
    199     <bean id="muaFileUplaodJobDetail" 
    200         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     222    <bean id="muaFileUplaodJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    201223        <property name="targetObject"> 
    202224            <ref bean="MUAProcess" /> 
     
    210232    </bean> 
    211233 
    212     <!--  Trigger setup --> 
     234    <!-- Trigger setup --> 
    213235    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    214236        <property name="triggers"> 
    215237            <list> 
    216                 <ref local="muaReleaseQuickTrigger" />     
    217                 <ref local="muaFileUploadQuickTrigger" />             
     238                <ref local="muaReleaseQuickTrigger" /> 
     239                <ref local="muaFileUploadQuickTrigger" /> 
    218240            </list> 
    219241        </property> 
    220242    </bean> 
    221     <!--  DONE --> 
    222  
    223         <!-- Create the storage engine and entry handler --> 
    224         <bean name="storageEngine" class="uk.ac.cardiff.raptor.store.EventStorageEngine"> 
    225         <property name="eventHandler"><ref bean="persistantEventHandler"/></property> 
    226         <property name="attributeAssociationEngine"><ref bean="attributeAssociationEngine"></ref></property> 
    227         </bean> 
    228      
     243    <!-- DONE --> 
     244 
     245    <!-- Create the storage engine and entry handler --> 
     246    <bean name="storageEngine" class="uk.ac.cardiff.raptor.store.EventStorageEngine"> 
     247        <property name="eventHandler"> 
     248            <ref bean="persistantEventHandler" /> 
     249        </property> 
     250        <property name="attributeAssociationEngine"> 
     251            <ref bean="attributeAssociationEngine"></ref> 
     252        </property> 
     253    </bean> 
     254 
    229255    <bean name="resourceStorageEngine" class="uk.ac.cardiff.raptor.store.ResourceStorageEngine"> 
    230         <property name="dataConnection"><ref bean="dataConnectionImpl"/></property> 
    231     </bean> 
    232  
    233  
    234  
    235         <bean name="persistantEventHandler" class="uk.ac.cardiff.raptor.store.impl.PersistantEventHandler"> 
    236                 <constructor-arg index="0"><ref bean="dataConnectionImpl"></ref></constructor-arg> 
    237         <!-- <property name="optimiseCountQueries"><value>true</value></property> 
    238         <property name="countClassNames"> 
    239             <list> 
    240                 <value>ShibbolethIdpAuthenticationEvent</value> 
    241                 <value>EzproxyAuthenticationEvent</value> 
    242             </list> 
    243         </property> --> 
    244         </bean> 
    245  
    246         <!--  Load all other bean definitions --> 
    247  
    248           <import resource="database.xml"/> 
    249           <import resource="metadata.xml"/> 
    250           <import resource="statistical-units.xml" /> 
    251           <import resource="event-release.xml"/> 
    252           <import resource="users.xml" /> 
    253           <import resource="attribute-association.xml"/> 
    254           <import resource="batch-event-parse.xml"/> 
     256        <property name="dataConnection"> 
     257            <ref bean="dataConnectionImpl" /> 
     258        </property> 
     259    </bean> 
     260 
     261 
     262 
     263    <bean name="persistantEventHandler" class="uk.ac.cardiff.raptor.store.impl.PersistantEventHandler"> 
     264        <constructor-arg index="0"> 
     265            <ref bean="dataConnectionImpl"></ref> 
     266        </constructor-arg> 
     267        <!-- <property name="optimiseCountQueries"><value>true</value></property> <property name="countClassNames"> <list>  
     268            <value>ShibbolethIdpAuthenticationEvent</value> <value>EzproxyAuthenticationEvent</value> </list> </property> --> 
     269    </bean> 
     270 
     271    <!-- Load all other bean definitions --> 
     272 
     273    <import resource="database.xml" /> 
     274    <import resource="metadata.xml" /> 
     275    <import resource="statistical-units.xml" /> 
     276    <import resource="event-release.xml" /> 
     277    <import resource="users.xml" /> 
     278    <import resource="attribute-association.xml" /> 
     279    <import resource="batch-event-parse.xml" /> 
     280    <import resource="statistical-units-system.xml" /> 
     281    <import resource="statistical-processors.xml" /> 
    255282 
    256283</beans> 
  • raptor-mua/trunk/src/main/config/statistical-processors.xml

    r1083 r1205  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <!-- 
     2<!-- Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> Licensed under the Apache License, Version 2.0 (the "License");  
     3    you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0  
     4    Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS  
     5    IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language  
     6    governing permissions and limitations under the License. --> 
     7<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     8    xsi:schemaLocation=" 
     9        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
    310 
    4     Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> 
     11    <!-- Processor registry, all processors are auto wired --> 
     12    <bean id="processorRegistry" class="uk.ac.cardiff.raptormua.engine.statistics.DefaultStatisticProcessorRegistry"> 
     13        <property name="processorFactory"><ref bean="processorFactory"/></property> 
     14        <property name="postprocessors"> 
     15            <list> 
     16                <bean class="uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate"> 
     17                    <property name="processorFriendlyName" value="Remove Rows From Result"/> 
     18                    <property name="processorClass"><value type="java.lang.Class">uk.ac.cardiff.raptormua.engine.statistics.processor.CutRowsPostProcessor</value></property> 
     19                    <property name="methodParameters"> 
     20                        <list> 
     21                             <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     22                                <property name="valueType" value="java.lang.Integer"/> 
     23                                <property name="parameterType" value="VALUE" /> 
     24                                <property name="parameterName" value="No. Of Rows To Keep"></property>                                 
     25                            </bean> 
     26                        </list> 
     27                    </property> 
     28                </bean> 
     29                <bean class="uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate"> 
     30                <property name="processorFriendlyName" value="X-Value as Percentages"/> 
     31                    <property name="processorClass"><value type="java.lang.Class">uk.ac.cardiff.raptormua.engine.statistics.processor.PercentagePostProcessor</value></property> 
     32                </bean> 
     33                <bean class="uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate"> 
     34                <property name="processorFriendlyName" value="Sort Y-Axis Alphabetically"/> 
     35                    <property name="processorClass"><value type="java.lang.Class">uk.ac.cardiff.raptormua.engine.statistics.processor.SortGroupsAlphabeticallyPostProcessor</value></property> 
     36                    <property name="methodParameters"> 
     37                        <list> 
     38                             <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     39                                <property name="valueType" value="java.lang.Boolean"/> 
     40                                <property name="parameterType" value="VALUE" /> 
     41                                <property name="parameterName" value="Ascending"></property>                                 
     42                            </bean> 
     43                        </list> 
     44                    </property> 
     45                </bean> 
     46                <bean class="uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate"> 
     47                <property name="processorFriendlyName" value="Format entityIds with SAML Org Name"/> 
     48                    <property name="processorClass"><value type="java.lang.Class">uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter</value></property> 
     49                </bean> 
     50                <bean class="uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate"> 
     51                <property name="processorFriendlyName" value="Sort X-axis by value"/> 
     52                    <property name="processorClass"><value type="java.lang.Class">uk.ac.cardiff.raptormua.engine.statistics.processor.RowSortPostProcessor</value></property> 
     53                    <property name="methodParameters"> 
     54                        <list> 
     55                             <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     56                                <property name="valueType" value="java.lang.Boolean"/> 
     57                                <property name="parameterType" value="VALUE" /> 
     58                                <property name="parameterName" value="Ascending"></property>                                 
     59                            </bean> 
     60                        </list> 
     61                    </property> 
     62                </bean> 
     63              
     64            </list> 
     65        </property> 
     66    </bean> 
     67     
     68    <bean id="processorFactory" class="uk.ac.cardiff.raptormua.engine.statistics.StatisticProcessorFactory"/> 
    569 
    6     Licensed under the Apache License, Version 2.0 (the "License"); 
    7     you may not use this file except in compliance with the License. 
    8     You may obtain a copy of the License at 
    970 
    10             http://www.apache.org/licenses/LICENSE-2.0 
    11  
    12     Unless required by applicable law or agreed to in writing, software 
    13     distributed under the License is distributed on an "AS IS" BASIS, 
    14     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    15     See the License for the specific language governing permissions and 
    16     limitations under the License. 
    17  
    18 --> 
    19 <beans xmlns="http://www.springframework.org/schema/beans" 
    20         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    21         xsi:schemaLocation=" 
    22         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
    23      
    2471 
    2572 
  • raptor-mua/trunk/src/main/config/statistical-units-system.xml

    r1171 r1205  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <!-- 
    3  
    4     Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> 
    5  
    6     Licensed under the Apache License, Version 2.0 (the "License"); 
    7     you may not use this file except in compliance with the License. 
    8     You may obtain a copy of the License at 
    9  
    10             http://www.apache.org/licenses/LICENSE-2.0 
    11  
    12     Unless required by applicable law or agreed to in writing, software 
    13     distributed under the License is distributed on an "AS IS" BASIS, 
    14     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    15     See the License for the specific language governing permissions and 
    16     limitations under the License. 
    17  
    18 --> 
    19 <beans xmlns="http://www.springframework.org/schema/beans" 
    20         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    21         xsi:schemaLocation=" 
     2<!-- Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> Licensed under the Apache License, Version 2.0 (the "License");  
     3    you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0  
     4    Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS  
     5    IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language  
     6    governing permissions and limitations under the License. --> 
     7<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     8    xsi:schemaLocation=" 
    229        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
    2310 
    2411 
    25         <!--  System level statistics that must be present for RaptorWeb to work --> 
    26  
    27         <bean id="numberOfAuthenticationsPer" class="uk.ac.cardiff.raptormua.engine.statistics.functions.CountEntry"> 
    28                 <property name="StatisticParameters"> 
    29                         <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
    30                                         <property name="statisticType"><value>System</value></property> 
    31                     <property name="resourceCategory"><value>EXTERNAL</value></property> 
    32                                         <property name="unitName"><value>numberOfAuthenticationsPer</value></property> 
    33                                         <property name="methodParams"> 
    34                                                 <list> 
    35                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    36                                                                 <property name="value"><value>1</value></property> 
    37                                                         </bean> 
    38                                                 </list> 
    39                                         </property> 
    40  
    41                                          <property name="presentation"> 
    42                         <bean class="uk.ac.cardiff.model.report.Presentation"> 
    43                             <property name="graphTitle" value="Number Of Authentications Per"/> 
    44                             <property name="xAxisLabel" value="Time"/> 
    45                              <property name="yAxisLabel" value="Frequency"/> 
    46                         </bean> 
    47                     </property> 
    48  
    49                                         <property name="series"> 
    50                         <list> 
    51                             <bean class="uk.ac.cardiff.model.report.Series"> 
    52                                 <property name="seriesLabel" value="Number of Authentications"/> 
    53                             </bean> 
    54                         </list> 
    55                     </property> 
    56  
    57                         </bean> 
    58                 </property> 
    59         </bean> 
    60  
    61         <bean id="numberOfUniqueUsersPer" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupBy"> 
    62                 <property name="StatisticParameters"> 
    63                         <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
    64                                         <property name="statisticType"><value>System</value></property> 
    65                     <property name="resourceCategory"><value>EXTERNAL</value></property> 
    66                                         <property name="unitName"><value>numberOfUnqiueUsersPer</value></property> 
    67                                         <property name="methodParams"> 
    68                                                 <list> 
    69                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    70                                                                 <property name="value"><value>principalName</value></property> 
    71                                                         </bean> 
    72                                                 </list> 
    73                                         </property> 
    74  
    75                                          <property name="presentation"> 
    76                         <bean class="uk.ac.cardiff.model.report.Presentation"> 
    77                             <property name="graphTitle" value="Number of unique users for"/> 
    78                             <property name="xAxisLabel" value="Time"/> 
    79                              <property name="yAxisLabel" value="Frequency"/> 
    80                         </bean> 
    81                     </property> 
    82  
    83                                         <property name="series"> 
    84                         <list> 
    85                             <bean class="uk.ac.cardiff.model.report.Series"> 
    86                                 <property name="seriesLabel" value="Number of Authentications"/> 
    87                             </bean> 
    88                         </list> 
    89                     </property> 
    90                         </bean> 
    91                 </property> 
    92         </bean> 
    93  
    94         <bean id="numberOfAuthenticationsPerIntervalNumber" class="uk.ac.cardiff.raptormua.engine.statistics.functions.CountEntry"> 
    95                 <property name="StatisticParameters"> 
    96                         <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
    97                                         <property name="statisticType"><value>System</value></property> 
    98                     <property name="resourceCategory"><value>EXTERNAL</value></property> 
    99                                         <property name="unitName"><value>numberOfAuthenticationsPerIntervalNumber</value></property> 
    100                                         <property name="methodParams"> 
    101                                                 <list> 
    102                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    103                                                                 <property name="value"><value>40</value></property> 
    104                                                         </bean> 
    105                                                 </list> 
    106                                         </property> 
    107  
    108                                          <property name="presentation"> 
    109                         <bean class="uk.ac.cardiff.model.report.Presentation"> 
    110                             <property name="graphTitle" value=""/> 
    111                             <property name="xAxisLabel" value=""/> 
    112                              <property name="yAxisLabel" value="Frequency"/> 
    113                              <property name="dateFormat" value="ddMMyy (HH:mm)"/> 
    114                         </bean> 
    115                     </property> 
    116  
    117                                         <property name="series"> 
    118                         <list> 
    119                             <bean class="uk.ac.cardiff.model.report.Series"> 
    120                                 <property name="seriesLabel" value="Number of Authentications"/> 
    121                             </bean> 
    122                         </list> 
    123                     </property> 
    124                         </bean> 
    125                 </property> 
    126         </bean> 
    127  
    128         <bean id="top5Resources" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupByFrequency"> 
    129                 <property name="StatisticParameters"> 
    130                         <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
    131                                         <property name="statisticType"><value>System</value></property> 
    132                     <property name="resourceCategory"><value>EXTERNAL</value></property> 
    133                                         <property name="unitName"><value>top5Resources</value></property> 
    134                                         <property name="methodParams"> 
    135                                                 <list> 
    136                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    137                                                                 <property name="value"><value>resourceId</value></property> 
    138                                                         </bean> 
    139                                                 </list> 
    140                                         </property> 
    141  
    142                                          <property name="presentation"> 
    143                         <bean class="uk.ac.cardiff.model.report.Presentation"> 
    144                             <property name="graphTitle" value="Top 5 Resources"/> 
    145                             <property name="xAxisLabel" value="Time"/> 
    146                              <property name="yAxisLabel" value="Frequency"/> 
    147                         </bean> 
    148                     </property> 
    149                                         <property name="series"> 
    150                         <list> 
    151                             <bean class="uk.ac.cardiff.model.report.Series"> 
    152                                 <property name="seriesLabel" value="Number of auths"/> 
    153                             </bean> 
    154                         </list> 
    155                     </property> 
    156  
    157                         </bean> 
    158                 </property> 
    159                 <property name="postprocessor"> 
    160                         <list> 
    161                                 <ref bean="sortDsc"/> 
    162                                 <ref bean="cut"/> 
    163                                 <ref bean="SamlMetadataNameFormatter"/> 
    164                         </list> 
    165                 </property> 
    166         </bean> 
    167  
    168  
    169         <bean id="numberOfUniqueAuthenticationsPerSP" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupByCountDistinct"> 
    170                 <property name="StatisticParameters"> 
    171                         <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
    172                                         <property name="statisticType"><value>System</value></property> 
    173                     <property name="resourceCategory"><value>EXTERNAL</value></property> 
    174                                         <property name="unitName"><value>numberOfUniqueAuthenticationsPerSP</value></property> 
    175                                         <property name="methodParams"> 
    176                                                 <list> 
    177                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    178                                                                 <property name="value"><value>resourceId</value></property> 
    179  
    180                                                         </bean> 
    181                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    182                                                              <property name="value"><value>principalName</value></property> 
    183                                                         </bean> 
    184                                                 </list> 
    185                                         </property> 
    186  
    187                                          <property name="presentation"> 
    188                         <bean class="uk.ac.cardiff.model.report.Presentation"> 
    189                             <property name="graphTitle" value="Number of Unique Authentications Per Service Provider"/> 
    190                             <property name="xAxisLabel" value="Time"/> 
    191                              <property name="yAxisLabel" value="Frequency"/> 
    192                         </bean> 
    193                     </property> 
    194  
    195                                         <property name="series"> 
    196                         <list> 
    197                             <bean class="uk.ac.cardiff.model.report.Series"> 
    198                                 <property name="seriesLabel" value="Number of Users"/> 
    199                             </bean> 
    200                         </list> 
    201                     </property> 
    202  
    203                         </bean> 
    204                 </property> 
    205                 <property name="postprocessor"> 
    206                         <list> 
    207                                 <ref bean="sortDsc"/> 
    208                                 <ref bean="cut"/> 
    209                                 <ref bean="SamlMetadataNameFormatter"/> 
    210                         </list> 
    211                 </property> 
    212         </bean> 
    213  
    214         <bean id="bottom5Resources" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupByFrequency"> 
    215                 <property name="StatisticParameters"> 
    216                         <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
    217                                         <property name="statisticType"><value>System</value></property> 
    218                     <property name="resourceCategory"><value>EXTERNAL</value></property> 
    219                                         <property name="unitName"><value>bottom5Resources</value></property> 
    220                                         <property name="methodParams"> 
    221                                                 <list> 
    222                                                         <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
    223                                                                 <property name="value"><value>resourceId</value></property> 
    224                                                         </bean> 
    225                                                 </list> 
    226                                         </property> 
    227  
    228                                          <property name="presentation"> 
    229                         <bean class="uk.ac.cardiff.model.report.Presentation"> 
    230                             <property name="graphTitle" value="Bottom 5 Resources"/> 
    231                             <property name="xAxisLabel" value="Time"/> 
    232                              <property name="yAxisLabel" value="Frequency"/> 
    233                         </bean> 
    234                     </property> 
    235  
    236                                         <property name="series"> 
    237                         <list> 
    238                             <bean class="uk.ac.cardiff.model.report.Series"> 
    239                                 <property name="seriesLabel" value="Number of auths"/> 
    240                             </bean> 
    241                         </list> 
    242                     </property> 
    243  
    244                         </bean> 
    245                 </property> 
    246                 <property name="postprocessor"> 
    247                         <list> 
    248                                 <ref bean="sortAsc"/> 
    249                                 <ref bean="cut"/> 
    250                                 <ref bean="SamlMetadataNameFormatter"/> 
    251                         </list> 
    252                 </property> 
    253         </bean> 
     12    <!-- System level statistics that must be present for RaptorWeb to work --> 
     13 
     14    <bean id="numberOfAuthenticationsPer" class="uk.ac.cardiff.raptormua.engine.statistics.functions.CountEntry"> 
     15        <property name="StatisticParameters"> 
     16            <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
     17                <property name="statisticType"> 
     18                    <value>System</value> 
     19                </property> 
     20                <property name="resourceCategory"> 
     21                    <value>EXTERNAL</value> 
     22                </property> 
     23                <property name="unitName"> 
     24                    <value>numberOfAuthenticationsPer</value> 
     25                </property> 
     26                <property name="methodParams"> 
     27                    <list> 
     28                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     29                            <property name="value"> 
     30                                <value>1</value> 
     31                            </property> 
     32                        </bean> 
     33                    </list> 
     34                </property> 
     35 
     36                <property name="presentation"> 
     37                    <bean class="uk.ac.cardiff.model.report.Presentation"> 
     38                        <property name="graphTitle" value="Number Of Authentications Per" /> 
     39                        <property name="xAxisLabel" value="Time" /> 
     40                        <property name="yAxisLabel" value="Frequency" /> 
     41                    </bean> 
     42                </property> 
     43 
     44                <property name="series"> 
     45                    <list> 
     46                        <bean class="uk.ac.cardiff.model.report.Series"> 
     47                            <property name="seriesLabel" value="Number of Authentications" /> 
     48                        </bean> 
     49                    </list> 
     50                </property> 
     51 
     52            </bean> 
     53        </property> 
     54    </bean> 
     55 
     56    <bean id="numberOfUniqueUsersPer" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupBy"> 
     57        <property name="StatisticParameters"> 
     58            <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
     59                <property name="statisticType"> 
     60                    <value>System</value> 
     61                </property> 
     62                <property name="resourceCategory"> 
     63                    <value>EXTERNAL</value> 
     64                </property> 
     65                <property name="unitName"> 
     66                    <value>numberOfUnqiueUsersPer</value> 
     67                </property> 
     68                <property name="methodParams"> 
     69                    <list> 
     70                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     71                            <property name="value"> 
     72                                <value>principalName</value> 
     73                            </property> 
     74                        </bean> 
     75                    </list> 
     76                </property> 
     77 
     78                <property name="presentation"> 
     79                    <bean class="uk.ac.cardiff.model.report.Presentation"> 
     80                        <property name="graphTitle" value="Number of unique users for" /> 
     81                        <property name="xAxisLabel" value="Time" /> 
     82                        <property name="yAxisLabel" value="Frequency" /> 
     83                    </bean> 
     84                </property> 
     85 
     86                <property name="series"> 
     87                    <list> 
     88                        <bean class="uk.ac.cardiff.model.report.Series"> 
     89                            <property name="seriesLabel" value="Number of Authentications" /> 
     90                        </bean> 
     91                    </list> 
     92                </property> 
     93            </bean> 
     94        </property> 
     95    </bean> 
     96 
     97    <bean id="numberOfAuthenticationsPerIntervalNumber" class="uk.ac.cardiff.raptormua.engine.statistics.functions.CountEntry"> 
     98        <property name="StatisticParameters"> 
     99            <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
     100                <property name="statisticType"> 
     101                    <value>System</value> 
     102                </property> 
     103                <property name="resourceCategory"> 
     104                    <value>EXTERNAL</value> 
     105                </property> 
     106                <property name="unitName"> 
     107                    <value>numberOfAuthenticationsPerIntervalNumber</value> 
     108                </property> 
     109                <property name="methodParams"> 
     110                    <list> 
     111                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     112                            <property name="value"> 
     113                                <value>40</value> 
     114                            </property> 
     115                        </bean> 
     116                    </list> 
     117                </property> 
     118 
     119                <property name="presentation"> 
     120                    <bean class="uk.ac.cardiff.model.report.Presentation"> 
     121                        <property name="graphTitle" value="" /> 
     122                        <property name="xAxisLabel" value="" /> 
     123                        <property name="yAxisLabel" value="Frequency" /> 
     124                        <property name="dateFormat" value="ddMMyy (HH:mm)" /> 
     125                    </bean> 
     126                </property> 
     127 
     128                <property name="series"> 
     129                    <list> 
     130                        <bean class="uk.ac.cardiff.model.report.Series"> 
     131                            <property name="seriesLabel" value="Number of Authentications" /> 
     132                        </bean> 
     133                    </list> 
     134                </property> 
     135            </bean> 
     136        </property> 
     137    </bean> 
     138 
     139    <bean id="top5Resources" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupByFrequency"> 
     140        <property name="StatisticParameters"> 
     141            <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
     142                <property name="statisticType"> 
     143                    <value>System</value> 
     144                </property> 
     145                <property name="resourceCategory"> 
     146                    <value>EXTERNAL</value> 
     147                </property> 
     148                <property name="unitName"> 
     149                    <value>top5Resources</value> 
     150                </property> 
     151                <property name="methodParams"> 
     152                    <list> 
     153                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     154                            <property name="value"> 
     155                                <value>resourceId</value> 
     156                            </property> 
     157                        </bean> 
     158                    </list> 
     159                </property> 
     160 
     161                <property name="presentation"> 
     162                    <bean class="uk.ac.cardiff.model.report.Presentation"> 
     163                        <property name="graphTitle" value="Top 5 Resources" /> 
     164                        <property name="xAxisLabel" value="Time" /> 
     165                        <property name="yAxisLabel" value="Frequency" /> 
     166                    </bean> 
     167                </property> 
     168                <property name="series"> 
     169                    <list> 
     170                        <bean class="uk.ac.cardiff.model.report.Series"> 
     171                            <property name="seriesLabel" value="Number of auths" /> 
     172                        </bean> 
     173                    </list> 
     174                </property> 
     175 
     176            </bean> 
     177        </property> 
     178        <property name="attachProcessors"> 
     179            <list> 
     180                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     181                    <property name="processorClass"> 
     182                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.RowSortPostProcessor</value> 
     183                    </property> 
     184                    <property name="methodParameters"> 
     185                        <list> 
     186                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     187                                <property name="parameterName" value="Ascending"></property>    
     188                                <property name="parameterType" value="VALUE" /> 
     189                                <property name="value"> 
     190                                    <value type="java.lang.Boolean">false</value> 
     191                                </property> 
     192                            </bean> 
     193                        </list> 
     194                    </property> 
     195                </bean> 
     196                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     197                    <property name="processorClass"> 
     198                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.CutRowsPostProcessor</value> 
     199                    </property> 
     200                    <property name="methodParameters"> 
     201                        <list> 
     202                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     203                            <property name="parameterName" value="No. Of Rows To Keep"></property>    
     204                                <property name="parameterType" value="VALUE" /> 
     205                                <property name="value"> 
     206                                    <value type="java.lang.Integer">5</value> 
     207                                </property> 
     208                            </bean> 
     209                        </list> 
     210                    </property> 
     211                </bean> 
     212                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     213                    <property name="processorClass"> 
     214                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter</value> 
     215                    </property> 
     216                </bean> 
     217            </list> 
     218        </property> 
     219    </bean> 
     220 
     221 
     222    <bean id="numberOfUniqueAuthenticationsPerSP" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupByCountDistinct"> 
     223        <property name="StatisticParameters"> 
     224            <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
     225                <property name="statisticType"> 
     226                    <value>System</value> 
     227                </property> 
     228                <property name="resourceCategory"> 
     229                    <value>EXTERNAL</value> 
     230                </property> 
     231                <property name="unitName"> 
     232                    <value>numberOfUniqueAuthenticationsPerSP</value> 
     233                </property> 
     234                <property name="methodParams"> 
     235                    <list> 
     236                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     237                            <property name="value"> 
     238                                <value>resourceId</value> 
     239                            </property> 
     240 
     241                        </bean> 
     242                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     243                            <property name="value"> 
     244                                <value>principalName</value> 
     245                            </property> 
     246                        </bean> 
     247                    </list> 
     248                </property> 
     249 
     250                <property name="presentation"> 
     251                    <bean class="uk.ac.cardiff.model.report.Presentation"> 
     252                        <property name="graphTitle" value="Number of Unique Authentications Per Service Provider" /> 
     253                        <property name="xAxisLabel" value="Time" /> 
     254                        <property name="yAxisLabel" value="Frequency" /> 
     255                    </bean> 
     256                </property> 
     257 
     258                <property name="series"> 
     259                    <list> 
     260                        <bean class="uk.ac.cardiff.model.report.Series"> 
     261                            <property name="seriesLabel" value="Number of Users" /> 
     262                        </bean> 
     263                    </list> 
     264                </property> 
     265 
     266            </bean> 
     267        </property> 
     268        <property name="attachProcessors"> 
     269            <list> 
     270                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     271                    <property name="processorClass"> 
     272                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.RowSortPostProcessor</value> 
     273                    </property> 
     274                    <property name="methodParameters"> 
     275                        <list> 
     276                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     277                                <property name="parameterName" value="Ascending"></property>  
     278                                <property name="parameterType" value="VALUE" /> 
     279                                <property name="value"> 
     280                                    <value type="java.lang.Boolean">false</value> 
     281                                </property> 
     282                            </bean> 
     283                        </list> 
     284                    </property> 
     285                </bean> 
     286                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     287                    <property name="processorClass"> 
     288                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.CutRowsPostProcessor</value> 
     289                    </property> 
     290                    <property name="methodParameters"> 
     291                        <list> 
     292                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     293                                <property name="parameterName" value="No. Of Rows To Keep"></property>  
     294                                <property name="parameterType" value="VALUE" /> 
     295                                <property name="value"> 
     296                                    <value type="java.lang.Integer">5</value> 
     297                                </property> 
     298                            </bean> 
     299                        </list> 
     300                    </property> 
     301                </bean> 
     302                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     303                    <property name="processorClass"> 
     304                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter</value> 
     305                    </property> 
     306                </bean> 
     307            </list> 
     308        </property>        
     309    </bean> 
     310 
     311    <bean id="bottom5Resources" class="uk.ac.cardiff.raptormua.engine.statistics.functions.GroupByFrequency"> 
     312        <property name="StatisticParameters"> 
     313            <bean class="uk.ac.cardiff.model.wsmodel.StatisticParameters"> 
     314                <property name="statisticType"> 
     315                    <value>System</value> 
     316                </property> 
     317                <property name="resourceCategory"> 
     318                    <value>EXTERNAL</value> 
     319                </property> 
     320                <property name="unitName"> 
     321                    <value>bottom5Resources</value> 
     322                </property> 
     323                <property name="methodParams"> 
     324                    <list> 
     325                        <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     326                            <property name="value"> 
     327                                <value>resourceId</value> 
     328                            </property> 
     329                        </bean> 
     330                    </list> 
     331                </property> 
     332 
     333                <property name="presentation"> 
     334                    <bean class="uk.ac.cardiff.model.report.Presentation"> 
     335                        <property name="graphTitle" value="Bottom 5 Resources" /> 
     336                        <property name="xAxisLabel" value="Time" /> 
     337                        <property name="yAxisLabel" value="Frequency" /> 
     338                    </bean> 
     339                </property> 
     340 
     341                <property name="series"> 
     342                    <list> 
     343                        <bean class="uk.ac.cardiff.model.report.Series"> 
     344                            <property name="seriesLabel" value="Number of auths" /> 
     345                        </bean> 
     346                    </list> 
     347                </property> 
     348 
     349            </bean> 
     350        </property> 
     351        <property name="attachProcessors"> 
     352            <list>                 
     353                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     354                    <property name="processorClass"> 
     355                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.RowSortPostProcessor</value> 
     356                    </property> 
     357                    <property name="methodParameters"> 
     358                        <list> 
     359                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     360                                <property name="parameterName" value="Ascending"/>     
     361                                <property name="parameterType" value="VALUE" /> 
     362                                <property name="value"> 
     363                                    <value type="java.lang.Boolean">true</value> 
     364                                </property> 
     365                            </bean> 
     366                        </list> 
     367                    </property> 
     368                </bean> 
     369                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     370                    <property name="processorClass"> 
     371                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.CutRowsPostProcessor</value> 
     372                    </property> 
     373                    <property name="methodParameters"> 
     374                        <list> 
     375                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     376                                <property name="parameterName" value="No. Of Rows To Keep"/> 
     377                                <property name="parameterType" value="VALUE" /> 
     378                                <property name="value"> 
     379                                    <value type="java.lang.Integer">5</value> 
     380                                </property> 
     381                            </bean> 
     382                        </list> 
     383                    </property> 
     384                </bean> 
     385                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     386                    <property name="processorClass"> 
     387                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter</value> 
     388                    </property> 
     389                </bean> 
     390            </list> 
     391        </property> 
     392    </bean> 
    254393 
    255394</beans> 
  • raptor-mua/trunk/src/main/config/statistical-units.xml

    r1171 r1205  
    2424 
    2525 
    26         <bean id="statisticalUnits" class="uk.ac.cardiff.raptormua.engine.statistics.StatisticsHandler"> 
    27         <property name="statisticRegistry"><ref bean="statisticRegistry"/></property> 
    28     </bean> 
    29      
    30     <!-- Handles all statistical units defined --> 
    31     <bean id="statisticRegistry" class="uk.ac.cardiff.raptormua.engine.statistics.ContextAwareStatisticRegistry"> 
    32         <property name="automaticallyFindStatsiticsToLoad" value="true"/> 
    33     </bean> 
    3426 
    3527 
     
    150142                        </bean> 
    151143                </property> 
    152         <property name="postprocessor"> 
     144         <property name="attachProcessors"> 
    153145            <list> 
    154                 <ref bean="groupNameSort"></ref> 
     146                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     147                    <property name="processorClass"> 
     148                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter</value> 
     149                    </property> 
     150                </bean> 
     151                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     152                    <property name="processorClass"> 
     153                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SortGroupsAlphabeticallyPostProcessor</value> 
     154                    </property> 
     155                    <property name="methodParameters"> 
     156                        <list> 
     157                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     158                                <property name="parameterType" value="VALUE" /> 
     159                                <property name="parameterName" value="Ascending"></property>    
     160                                <property name="value"> 
     161                                    <value type="java.lang.Boolean">true</value> 
     162                                </property> 
     163                            </bean> 
     164                        </list> 
     165                    </property> 
     166                </bean>                
    155167            </list> 
    156168        </property> 
     
    208220                        </bean> 
    209221                </property> 
    210                 <property name="postprocessor"> 
    211                         <list> 
    212                                 <ref bean="SamlMetadataNameFormatter"></ref> 
    213                         </list> 
    214                 </property> 
     222                  <property name="attachProcessors"> 
     223            <list> 
     224                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     225                    <property name="processorClass"> 
     226                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter</value> 
     227                    </property> 
     228                </bean> 
     229                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     230                    <property name="processorClass"> 
     231                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SortGroupsAlphabeticallyPostProcessor</value> 
     232                    </property> 
     233                    <property name="methodParameters"> 
     234                        <list> 
     235                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     236                                <property name="parameterType" value="VALUE" /> 
     237                                <property name="parameterName" value="Ascending"></property>    
     238                                <property name="value"> 
     239                                    <value type="java.lang.Boolean">true</value> 
     240                                </property> 
     241                            </bean> 
     242                        </list> 
     243                    </property> 
     244                </bean>                
     245            </list> 
     246        </property> 
    215247        </bean> 
    216248 
     
    259291            </bean> 
    260292        </property> 
    261         <property name="postprocessor"> 
     293          <property name="attachProcessors"> 
    262294            <list> 
    263                 <ref bean="groupNameSort"></ref> 
     295                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     296                    <property name="processorClass"> 
     297                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SortGroupsAlphabeticallyPostProcessor</value> 
     298                    </property> 
     299                    <property name="methodParameters"> 
     300                        <list> 
     301                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     302                                <property name="parameterType" value="VALUE" /> 
     303                                <property name="parameterName" value="Ascending"></property>    
     304                                <property name="value"> 
     305                                    <value type="java.lang.Boolean">true</value> 
     306                                </property> 
     307                            </bean> 
     308                        </list> 
     309                    </property> 
     310                </bean>                
    264311            </list> 
    265312        </property> 
     
    300347            </bean> 
    301348        </property> 
    302         <property name="postprocessor"> 
     349       <property name="attachProcessors"> 
    303350            <list> 
    304                 <ref bean="groupNameSort"></ref> 
     351                <bean class="uk.ac.cardiff.model.wsmodel.ProcessorInformation"> 
     352                    <property name="processorClass"> 
     353                        <value>uk.ac.cardiff.raptormua.engine.statistics.processor.SortGroupsAlphabeticallyPostProcessor</value> 
     354                    </property> 
     355                    <property name="methodParameters"> 
     356                        <list> 
     357                            <bean class="uk.ac.cardiff.model.wsmodel.MethodParameter"> 
     358                                <property name="parameterType" value="VALUE" /> 
     359                                <property name="parameterName" value="Ascending"></property>    
     360                                <property name="value"> 
     361                                    <value type="java.lang.Boolean">true</value> 
     362                                </property> 
     363                            </bean> 
     364                        </list> 
     365                    </property> 
     366                </bean>                
    305367            </list> 
    306368        </property> 
    307369    </bean> 
    308370 
    309         <!--  Support statistical workflows --> 
    310  
    311         <bean id="percentagePost" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.PercentagePostProcessor"> 
    312         </bean> 
    313      
    314     <bean id="groupNameSort" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.SortGroupsAlphabeticallyPostProcessor"> 
    315     </bean> 
    316  
    317         <bean id="SamlMetadataNameFormatter" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.SamlMetadataNameFormatter"> 
    318                 <constructor-arg index="0"> 
    319                   <list> 
    320                    <value>/Users/philsmart/Documents/DataSets/shib/ukfederation-metadata.xml</value> 
    321                    <value>/Users/philsmart/Documents/DataSets/shib/metadata.cufederation.xml</value> 
    322                   </list>                
    323                 </constructor-arg> 
    324         </bean> 
    325  
    326         <bean id="sortDsc" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.RowSortPostProcessor"> 
    327                 <property name="ascending"><value>false</value></property> 
    328         </bean> 
    329  
    330         <bean id="sortAsc" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.RowSortPostProcessor"> 
    331                 <property name="ascending"><value>true</value></property> 
    332         </bean> 
    333  
    334         <bean id="cut" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.CutRowsPostProcessor"> 
    335                 <property name="numberOfRowsToKeep"><value>5</value></property> 
    336         </bean> 
    337  
    338         <bean id="numberFormat" class = "uk.ac.cardiff.raptormua.engine.statistics.processor.NumberFormatterPostProcessor"> 
    339         </bean> 
    340  
    341  
    342         <import resource="statistical-units-system.xml"/> 
    343     <!-- <import resource="statistical-processors.xml"/> --> 
     371         
     372 
     373 
     374         
    344375 
    345376 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/CapabilitiesConstructor.java

    r1183 r1205  
    2222import java.util.ArrayList; 
    2323import java.util.Collections; 
     24import java.util.Date; 
    2425import java.util.List; 
    2526import java.util.Set; 
    2627 
     28import org.joda.time.DateTime; 
    2729import org.slf4j.Logger; 
    2830import org.slf4j.LoggerFactory; 
     
    3436import uk.ac.cardiff.model.resource.ResourceMetadata; 
    3537import uk.ac.cardiff.model.wsmodel.Capabilities; 
     38import uk.ac.cardiff.model.wsmodel.EventTypeInformation; 
    3639import uk.ac.cardiff.model.wsmodel.ProcessorInformation; 
    3740import uk.ac.cardiff.model.wsmodel.StatisticalUnitInformation; 
    38 import uk.ac.cardiff.model.wsmodel.Suggestion; 
    3941import uk.ac.cardiff.model.wsmodel.SuggestionValues; 
    4042import uk.ac.cardiff.raptor.runtimeutils.ReflectionHelper; 
     
    4244import uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic; 
    4345import uk.ac.cardiff.raptormua.engine.statistics.StatisticHandler; 
    44 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     46import uk.ac.cardiff.raptormua.engine.statistics.StatisticProcessorRegistry; 
     47import uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate; 
    4548import uk.ac.cardiff.raptormua.runtimeutils.ResourceMetadataComparator; 
    4649 
     
    4952 *  
    5053 */ 
    51 public class CapabilitiesConstructor implements ApplicationContextAware { 
     54public class CapabilitiesConstructor extends BaseCapabilitiesContructor implements ApplicationContextAware { 
    5255 
    5356    /** Class logger. */ 
     
    7275 
    7376    /** 
    74      * @return 
     77     * Constructos the capabilities of this MUA instance, by computing and storing the following: 
     78     * <ul> 
     79     * <li>Stores the metadata assoicated to this MUA. 
     80     * </ul> 
     81     *  
     82     * @return the {@link Capabilities} of this MUA. 
    7583     */ 
    7684    public Capabilities constructCapabilities(StatisticHandler statisticsHandler, EventStorageEngine storageEngine, 
    7785            ServiceMetadata metadata) { 
    78         log.info("Capabilities Constructor Called"); 
     86        log.info("Capabilities constructor called"); 
    7987        long startTime = System.currentTimeMillis(); 
    8088 
     
    92100 
    93101            capabilities = new Capabilities(); 
    94             List<BaseStatistic> su = statisticsHandler.getStatisticalUnits(); 
    95102            capabilities.setMetadata(metadata); 
    96103 
    97             // set possible field names 
    98             SuggestionValues suggestionValues = new SuggestionValues(); 
    99             suggestionValues.setPossibleFieldNameValues(ReflectionHelper.getFieldsFromEntrySubClasses()); 
    100             capabilities.setSuggestionValues(suggestionValues); 
    101             capabilities.setNumberOfAuthenticationsStored(storageEngine.getEventHandler().getNumberOfEvents()); 
    102             List<Suggestion> possiblePostProcessors = findPostProcessors(); 
    103             log.trace("Has set {} possible post processor suggestion values", possiblePostProcessors.size()); 
    104             suggestionValues.setPossiblePostProcessors(possiblePostProcessors); 
    105  
    106             // set possible values for field names 
    107             List<String> possibleFieldNames = new ArrayList<String>(); 
    108             if (excludeFieldNames == null) { 
    109                 possibleFieldNames = suggestionValues.getPossibleFieldNameValuesList(); 
    110             } else { 
    111                 for (String fieldname : suggestionValues.getPossibleFieldNameValuesList()) { 
    112                     if (!excludeFieldNames.contains(fieldname)) { 
    113                         possibleFieldNames.add(fieldname); 
    114                     } 
    115                 } 
    116             } 
    117  
    118             suggestionValues.setPossibleFieldValues(storageEngine.getPossibleValuesFor(possibleFieldNames)); 
    119  
    120             // set resource metadata 
    121             List<ResourceMetadata> resourceMetadata = 
    122                     (List<ResourceMetadata>) storageEngine.getEventHandler().query("from ResourceMetadata", null); 
    123             log.debug("Setting {} resource metadata", resourceMetadata.size()); 
    124             Collections.sort(resourceMetadata, new ResourceMetadataComparator()); 
    125             capabilities.setResourceMetadata(resourceMetadata); 
    126  
    127             ArrayList<StatisticalUnitInformation> stats = new ArrayList(); 
    128             for (BaseStatistic entry : su) { 
    129                 log.debug("Setting statistical unit information as: " + entry.getStatisticParameters().getUnitName()); 
    130                 StatisticalUnitInformation information = new StatisticalUnitInformation(); 
    131  
    132                 information.setStatisticParameters(entry.getStatisticParameters()); 
    133  
    134                 /* the below should be changed */ 
    135                 ArrayList<ProcessorInformation> postprocessors = new ArrayList<ProcessorInformation>(); 
    136                 if (entry.getPostprocessor() != null) { 
    137                     for (StatisticPostProcessor postprocessor : entry.getPostprocessor()) { 
    138                         ProcessorInformation processorInformation = new ProcessorInformation(); 
    139                         processorInformation.setBeanName(postprocessor.getClass().getSimpleName()); 
    140                         postprocessors.add(processorInformation); 
    141                     } 
    142                 } 
    143                 information.setPostprocessors(postprocessors); 
    144                 stats.add(information); 
    145             } 
    146             capabilities.setStatisticalServices(stats); 
     104            try { 
     105                String version = 
     106                        Version.getMajorVersion() + "." + Version.getMinorVersion() + "." + Version.getMicroVersion(); 
     107                capabilities.setMuaVersion(version); 
     108            } catch (Throwable e) { 
     109                capabilities.setMuaVersion("Unknown"); 
     110            } 
     111 
     112            addStatisticInformation(capabilities, statisticsHandler); 
     113            addSuggestions(capabilities, storageEngine, statisticsHandler); 
     114            addEventTotals(capabilities, storageEngine); 
     115            addEventDateInformation(capabilities, storageEngine); 
     116            addResourceInformation(capabilities, storageEngine); 
    147117 
    148118            if (cacheEnabled) { 
     
    158128    } 
    159129 
    160     private List<Suggestion> findPostProcessors() { 
    161         String[] postProcessors = applicationContext.getBeanNamesForType(StatisticPostProcessor.class); 
    162         ArrayList<Suggestion> postProcessorSuggestions = new ArrayList<Suggestion>(); 
    163         for (String processor : postProcessors) { 
    164             Suggestion suggestion = new Suggestion(); 
    165             suggestion.setBase("postprocessor"); 
    166             suggestion.setValue(processor); 
    167             postProcessorSuggestions.add(suggestion); 
    168             log.trace("Postprocessor, {}", processor); 
    169         } 
    170         return postProcessorSuggestions; 
    171  
     130    public void addStatisticInformation(Capabilities capabilities, StatisticHandler statisticsHandler) { 
     131        log.debug("Adding statistical information to capabilities"); 
     132        ArrayList<StatisticalUnitInformation> stats = new ArrayList<StatisticalUnitInformation>(); 
     133        List<BaseStatistic> su = statisticsHandler.getStatisticalUnits(); 
     134        for (BaseStatistic entry : su) { 
     135            log.debug("Setting statistical unit information as: " + entry.getStatisticParameters().getUnitName()); 
     136            StatisticalUnitInformation information = new StatisticalUnitInformation(); 
     137            information.setStatisticParameters(entry.getStatisticParameters()); 
     138            information.setPostprocessors(entry.getAttachProcessors()); 
     139            stats.add(information); 
     140        } 
     141        capabilities.setStatisticalServices(stats); 
     142    } 
     143 
     144    private void addSuggestions(Capabilities capabilities, EventStorageEngine storageEngine, 
     145            StatisticHandler statisticsHandler) { 
     146        log.debug("Adding suggestion information to capabilities"); 
     147        SuggestionValues suggestionValues = new SuggestionValues(); 
     148        suggestionValues.setPossibleFieldNameValues(ReflectionHelper.getFieldsFromEntrySubClasses()); 
     149        capabilities.setSuggestionValues(suggestionValues); 
     150 
     151        StatisticProcessorRegistry processorRegistry = 
     152                statisticsHandler.getStatisticRegistry().getStatisticProcessorRegistry(); 
     153 
     154        List<ProcessorTemplate> templates = processorRegistry.getStatisticProcessorTemplates(); 
     155        List<ProcessorInformation> possiblePostProcessors = new ArrayList<ProcessorInformation>(); 
     156        for (ProcessorTemplate template : templates) { 
     157            ProcessorInformation information = new ProcessorInformation(); 
     158            information.setFriendlyName(template.getProcessorFriendlyName()); 
     159            information.setProcessorClass(template.getProcessorClass().getCanonicalName()); 
     160            information.setMethodParameters(template.getMethodParameters()); 
     161            possiblePostProcessors.add(information); 
     162 
     163        } 
     164 
     165        log.trace("Has set {} possible post processor suggestion values", possiblePostProcessors.size()); 
     166        suggestionValues.setPossiblePostProcessors(possiblePostProcessors); 
     167 
     168        // set possible values for field names 
     169        List<String> possibleFieldNames = new ArrayList<String>(); 
     170        if (excludeFieldNames == null) { 
     171            possibleFieldNames = suggestionValues.getPossibleFieldNameValuesList(); 
     172        } else { 
     173            for (String fieldname : suggestionValues.getPossibleFieldNameValuesList()) { 
     174                if (!excludeFieldNames.contains(fieldname)) { 
     175                    possibleFieldNames.add(fieldname); 
     176                } 
     177            } 
     178        } 
     179        log.debug("Capabilities constructor setting possible field values (can cause issues)"); 
     180        suggestionValues.setPossibleFieldValues(storageEngine.getPossibleValuesFor(possibleFieldNames)); 
     181    } 
     182 
     183    private void addEventTotals(Capabilities capabilities, EventStorageEngine storageEngine) { 
     184        log.debug("Adding event totals to capabilities"); 
     185        capabilities.setNumberOfAuthenticationsStored(storageEngine.getEventHandler().getNumberOfEvents()); 
     186        List<String> eventTypes = ReflectionHelper.getAllEventClasses(); 
     187        List<EventTypeInformation> eventsPerType = new ArrayList<EventTypeInformation>(); 
     188        for (String eventType : eventTypes) { 
     189            String query = "SELECT count(*) from " + eventType; 
     190            try { 
     191                long count = (Long) storageEngine.getEventHandler().queryUnique(query, null); 
     192                log.debug("EventType {} has {} events", eventType, count); 
     193                eventsPerType.add(new EventTypeInformation(eventType, count)); 
     194            } catch (Exception e) { 
     195                log.warn("EventType [{}] has no count (table probably does not exist yet, no problem)", eventType); 
     196            } 
     197        } 
     198        capabilities.setEventsPerType(eventsPerType); 
     199    } 
     200 
     201    private void addEventDateInformation(Capabilities capabilities, EventStorageEngine storageEngine) { 
     202        log.debug("Adding event dates to capabilities"); 
     203        DateTime latest = 
     204                (DateTime) storageEngine.getEventHandler().queryUnique("SELECT max(eventTime) from Event", null); 
     205        DateTime earliest = 
     206                (DateTime) storageEngine.getEventHandler().queryUnique("SELECT min(eventTime) from Event", null); 
     207        capabilities.setLatestEventTime(new Date(latest.getMillis())); 
     208        capabilities.setEarliestEventTime(new Date(earliest.getMillis())); 
     209    } 
     210 
     211    private void addResourceInformation(Capabilities capabilities, EventStorageEngine storageEngine) { 
     212        log.debug("Adding resource metadata to capabilities"); 
     213        List<ResourceMetadata> resourceMetadata = 
     214                (List<ResourceMetadata>) storageEngine.getEventHandler().query("from ResourceMetadata", null); 
     215        log.debug("Setting {} resource metadata(s)", resourceMetadata.size()); 
     216        Collections.sort(resourceMetadata, new ResourceMetadataComparator()); 
     217        capabilities.setResourceMetadata(resourceMetadata); 
    172218    } 
    173219 
     
    179225        boolean shouldReset = (currentTimeMillis - cacheResetTimeMs) > cacheTimeoutMs; 
    180226        if (shouldReset) { 
    181             log.info("Ldap cache was cleared, timeout reached"); 
     227            log.info("Capabilities cache was cleared, timeout reached"); 
    182228            cachedCapabilities = null; 
    183229        } 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/MUAEngine.java

    r1184 r1205  
    8888 
    8989    /** Constructor for creating and storing this MUAs capabilities. */ 
    90     private CapabilitiesConstructor capabilitiesConstructor; 
     90    private BaseCapabilitiesContructor capabilitiesConstructor; 
     91 
     92    /** 
     93     * Whether to force all event storage to occur synchronously. 
     94     */ 
     95    private boolean forceSynchronousEventStorage; 
    9196 
    9297    /** 
     
    313318        if (pushed.getEvents().size() > 0) { 
    314319            int transactionId = (int) (Math.random() * 1000000); 
    315             storageEngine.performAsynchronousEntryStoragePipeline(transactionId, pushed.getEvents()); 
     320            if (!forceSynchronousEventStorage) { 
     321                storageEngine.performAsynchronousEntryStoragePipeline(transactionId, pushed.getEvents()); 
     322            } else { 
     323                storageEngine.performSynchronousEntryStoragePipeline(transactionId, pushed.getEvents()); 
     324            } 
     325 
    316326        } 
    317327    } 
     
    417427     * @param capabilitiesConstructor the capabilitiesConstructor to set 
    418428     */ 
    419     public void setCapabilitiesConstructor(CapabilitiesConstructor capabilitiesConstructor) { 
     429    public void setCapabilitiesConstructor(BaseCapabilitiesContructor capabilitiesConstructor) { 
    420430        this.capabilitiesConstructor = capabilitiesConstructor; 
    421431    } 
     
    426436     * @return the capabilitiesConstructor 
    427437     */ 
    428     public CapabilitiesConstructor getCapabilitiesConstructor() { 
     438    public BaseCapabilitiesContructor getCapabilitiesConstructor() { 
    429439        return capabilitiesConstructor; 
    430440    } 
     
    444454    } 
    445455 
     456    /** 
     457     * @param forceSynchronousEventStorage the forceSynchronousEventStorage to set 
     458     */ 
     459    public void setForceSynchronousEventStorage(boolean forceSynchronousEventStorage) { 
     460        this.forceSynchronousEventStorage = forceSynchronousEventStorage; 
     461    } 
     462 
     463    /** 
     464     * @return the forceSynchronousEventStorage 
     465     */ 
     466    public boolean isForceSynchronousEventStorage() { 
     467        return forceSynchronousEventStorage; 
     468    } 
     469 
    446470} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/BaseStatistic.java

    r1185 r1205  
    3232import uk.ac.cardiff.model.report.AggregatorGraphModel; 
    3333import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     34import uk.ac.cardiff.model.wsmodel.ProcessorInformation; 
    3435import uk.ac.cardiff.model.wsmodel.StatisticParameters; 
    3536import uk.ac.cardiff.raptor.store.QueryableEventHandler; 
     
    4142 
    4243/** 
    43  * @author philsmart Holds a statistics unit or one statistics operation on one piece of data 
     44 * Holds a statistics unit or one statistics operation on one piece of data 
    4445 */ 
    4546public abstract class BaseStatistic { 
     
    6061 
    6162    /** 
     63     * A list of processors that needs to be instantiated for this class (during initialization of the MUA, or 
     64     * dynamically). 
     65     */ 
     66    private List<ProcessorInformation> attachProcessors; 
     67 
     68    /** 
    6269     * After each statistic has been invoked, the results of each series are stored as <code>ObservationSeries</code> in 
    6370     * this list. 
     
    7380 
    7481    /** 
    75      * Method that performs the statistical operation. Overridden by each concrete statistic class. 
     82     * Method that performs the statistical operation. Overridden by each concrete implementation statistic class. 
    7683     *  
    7784     * @param methodParams 
    78      * @param sqlWhere 
     85     * @param sqlWhere essentially a filter that is applied to stored events before the statistic is performed. 
    7986     * @return 
    8087     * @throws StatisticalUnitException 
     
    264271    } 
    265272 
     273    /** 
     274     * @param attachProcessors the attachProcessors to set 
     275     */ 
     276    public void setAttachProcessors(List<ProcessorInformation> attachProcessors) { 
     277        this.attachProcessors = attachProcessors; 
     278    } 
     279 
     280    /** 
     281     * @return the attachProcessors 
     282     */ 
     283    public List<ProcessorInformation> getAttachProcessors() { 
     284        return attachProcessors; 
     285    } 
     286 
    266287} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/ContextAwareStatisticRegistry.java

    r1175 r1205  
    2828import org.springframework.context.ApplicationContextAware; 
    2929 
    30 import uk.ac.cardiff.model.wsmodel.ProcessorInformation; 
    31 import uk.ac.cardiff.model.wsmodel.StatisticalUnitInformation; 
    32  
    33 public class ContextAwareStatisticRegistry implements StatisticRegistry, ApplicationContextAware, InitializingBean { 
     30public class ContextAwareStatisticRegistry extends AbstractStatisticRegistry implements ApplicationContextAware, 
     31        InitializingBean { 
    3432 
    3533    /** Class Logger */ 
     
    4240     **/ 
    4341    private boolean automaticallyFindStatsiticsToLoad = false; 
    44  
    45     /** 
    46      * List of {@link uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic}s that have been registered with this handler 
    47      */ 
    48     private List<BaseStatistic> statisticalUnits; 
    4942 
    5043    /** Used to automatically add statistics from the application context iff automaticallyFindStatsiticsToLoad = true */ 
     
    6053            setStatisticalUnitsFromApplicationContext(); 
    6154        } 
    62     } 
    63  
    64     public void updateStatisticalUnit(StatisticalUnitInformation statisticalUnitInformation) { 
    65         BaseStatistic toUpdate = null; 
    66         for (BaseStatistic statistic : statisticalUnits) { 
    67             if (statistic.getStatisticParameters().getUnitName() 
    68                     .equals(statisticalUnitInformation.getStatisticParameters().getUnitName())) 
    69                 toUpdate = statistic; 
    70         } 
    71         log.debug("Found statistic [{}] to update", toUpdate.getStatisticParameters().getUnitName()); 
    72         performUpdate(toUpdate, statisticalUnitInformation); 
    73         log.debug("Finished updating statistic [{}]", toUpdate.getStatisticParameters().getUnitName()); 
    74  
    75     } 
    76  
    77     public BaseStatistic getStatistic(String statisticName) { 
    78         for (BaseStatistic statistic : statisticalUnits) { 
    79             if (statistic.getStatisticParameters().getUnitName().equals(statisticName)) { 
    80                 log.debug("Found statistic [{}] from statistic registry", statistic.getStatisticParameters() 
    81                         .getUnitName()); 
    82                 return statistic; 
    83             } 
    84         } 
    85         return null; 
    86     } 
    87  
    88     /** 
    89      * Updates the statistical parameters of the passed statistic, does not yet handle the post processors 
    90      *  
    91      * @param statistic - the statistic to update 
    92      * @param statisticalUnitInformation - the statistical unit information to used update the <code>statistic</code> 
    93      */ 
    94     private void performUpdate(BaseStatistic statistic, StatisticalUnitInformation statisticalUnitInformation) { 
    95         statistic.setStatisticParameters(statisticalUnitInformation.getStatisticParameters()); 
    96         // now deal with the post processors 
    97         // List<StatisticPostProcessor> postProcessors = 
    98         // initialisePostProcessors(statisticalUnitInformation.getPostprocessors()); 
    99         // statistic.setPostprocessor(postProcessors); 
    100     } 
    101  
    102     /** 
    103      *  
    104      * @param postProcessorsInformation 
    105      * @return 
    106      */ 
    107     private List<StatisticPostProcessor> initialisePostProcessors(List<ProcessorInformation> postProcessorsInformation) { 
    108         // TODO could be factory method, need to acquire the bean implementation now. 
    109         StatisticProcessorFactory factory = new StatisticProcessorFactory(); 
    110         List<StatisticPostProcessor> postprocessors = null; 
    111  
    112         for (ProcessorInformation information : postProcessorsInformation) { 
    113             postprocessors.add(factory.getPostProcessor(information.getClassName())); 
    114         } 
    115  
    116         return postprocessors; 
    11755    } 
    11856 
     
    13674        Map<String, ?> allStatisticBeans = applicationContext.getBeansOfType(BaseStatistic.class); 
    13775        for (Map.Entry<String, ?> entry : allStatisticBeans.entrySet()) { 
    138             log.debug("Registering statistic [{}], role {}", ((BaseStatistic) entry.getValue()).getStatisticParameters() 
    139                     .getUnitName(), ((BaseStatistic) entry.getValue()).getStatisticParameters().getType()); 
    140             statisticalUnits.add((BaseStatistic) entry.getValue()); 
     76            BaseStatistic statistic = (BaseStatistic) entry.getValue(); 
     77            log.debug("Registering statistic [{}], role {}", statistic.getStatisticParameters().getUnitName(), 
     78                    statistic.getStatisticParameters().getType()); 
     79            statistic.setPostprocessor(initialisePostProcessors(statistic.getAttachProcessors())); 
     80            statisticalUnits.add(statistic); 
    14181        } 
    14282    } 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/DefaultStatisticProcessorRegistry.java

    r1175 r1205  
    1 /** 
    2  * Copyright (C) 2010 Cardiff University, Wales <smartp@cf.ac.uk> 
    3  * 
    4  * Licensed under the Apache License, Version 2.0 (the "License"); 
    5  * you may not use this file except in compliance with the License. 
    6  * You may obtain a copy of the License at 
    7  * 
    8  *         http://www.apache.org/licenses/LICENSE-2.0 
    9  * 
    10  * Unless required by applicable law or agreed to in writing, software 
    11  * distributed under the License is distributed on an "AS IS" BASIS, 
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    13  * See the License for the specific language governing permissions and 
    14  * limitations under the License. 
    15  */ 
    161 
    172package uk.ac.cardiff.raptormua.engine.statistics; 
     
    194import java.util.List; 
    205 
     6import org.slf4j.Logger; 
     7import org.slf4j.LoggerFactory; 
     8 
    219import uk.ac.cardiff.model.wsmodel.ProcessorInformation; 
     10import uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate; 
    2211 
    23 //TODO NEW and not finished. 
    2412public class DefaultStatisticProcessorRegistry implements StatisticProcessorRegistry { 
    2513 
    26     List<StatisticPostProcessor> postProcessors; 
     14    /** class logger */ 
     15    private final Logger log = LoggerFactory.getLogger(DefaultStatisticProcessorRegistry.class); 
    2716 
    28     public void addPostProcessor(ProcessorInformation processorInformation) { 
     17    /** A list or register of all postprocessors */ 
     18    private List<ProcessorTemplate> postprocessors; 
     19 
     20    /** Factory used to construct processors from templates */ 
     21    private StatisticProcessorFactory processorFactory; 
     22 
     23    /** 
     24     * Calls the <code>processorFactory</code> to instantiate a processor based a matching template from the list 
     25     * <code>postprocessors</code> and the input <code>processorInformation</code>. Also sets the friendly name of the 
     26     * <code>processorInformation</code> for future reference. 
     27     *  
     28     * @param processorInformation information about the processor to create. 
     29     * @throws StatisticPostProcessorFactoryException 
     30     */ 
     31    public StatisticPostProcessor getProcessor(ProcessorInformation processorInformation) 
     32            throws ProcessorRegistryException, StatisticPostProcessorFactoryException { 
     33        for (ProcessorTemplate processorTemplate : postprocessors) { 
     34            if (processorTemplate.getProcessorClass().getCanonicalName() 
     35                    .equals(processorInformation.getProcessorClass())) { 
     36                processorInformation.setFriendlyName(processorTemplate.getProcessorFriendlyName()); 
     37                return processorFactory.getPostProcessor(processorTemplate, processorInformation.getMethodParameters()); 
     38            } 
     39        } 
     40        throw new ProcessorRegistryException("No such processor with type " + processorInformation.getProcessorClass()); 
    2941 
    3042    } 
    3143 
    32     public void setPostProcessors(List<ProcessorInformation> processorsInformation) { 
    33         for (ProcessorInformation processorInformation : processorsInformation) { 
     44    /** 
     45     * @param postprocessors the postprocessors to set 
     46     */ 
     47    public void setPostprocessors(List<ProcessorTemplate> postprocessors) { 
     48        for (ProcessorTemplate processorTemplate : postprocessors) { 
     49            log.info("Registering postprocessor [{}] type [{}]", processorTemplate.getProcessorFriendlyName(), 
     50                    processorTemplate.getProcessorClass()); 
     51        } 
     52        this.postprocessors = postprocessors; 
     53    } 
    3454 
    35         } 
     55    public List<ProcessorTemplate> getStatisticProcessorTemplates() { 
     56        return postprocessors; 
     57    } 
    3658 
     59    /** 
     60     * @return the postprocessors 
     61     */ 
     62    public List<ProcessorTemplate> getPostprocessors() { 
     63        return postprocessors; 
     64    } 
     65 
     66    /** 
     67     * @param processorFactory the processorFactory to set 
     68     */ 
     69    public void setProcessorFactory(StatisticProcessorFactory processorFactory) { 
     70        this.processorFactory = processorFactory; 
     71    } 
     72 
     73    /** 
     74     * @return the processorFactory 
     75     */ 
     76    public StatisticProcessorFactory getProcessorFactory() { 
     77        return processorFactory; 
    3778    } 
    3879 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/StatisticPostProcessor.java

    r1083 r1205  
    1717 * 
    1818 */ 
     19 
    1920package uk.ac.cardiff.raptormua.engine.statistics; 
    2021 
    21 import java.util.List; 
    22  
    23 import uk.ac.cardiff.model.event.Event; 
    2422import uk.ac.cardiff.raptormua.engine.statistics.processor.PostprocessorException; 
    25 import uk.ac.cardiff.raptormua.engine.statistics.processor.PreprocessorException; 
    2623import uk.ac.cardiff.raptormua.engine.statistics.records.Observation; 
    2724 
    2825/** 
    2926 * @author philsmart 
    30  * 
     27 *  
    3128 */ 
    3229public interface StatisticPostProcessor { 
    3330 
    34         public Observation[] process(Observation[] observations) throws PostprocessorException; 
     31    public Observation[] process(Observation[] observations) throws PostprocessorException; 
     32 
     33    /** 
     34     * Gets the friendly name of this processor. 
     35     *  
     36     * @return the friendly name of this processor. 
     37     */ 
     38    public String getFriendlyName(); 
     39 
    3540} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/StatisticProcessorFactory.java

    r1097 r1205  
    1717package uk.ac.cardiff.raptormua.engine.statistics; 
    1818 
     19import java.util.List; 
     20 
    1921import org.slf4j.Logger; 
    2022import org.slf4j.LoggerFactory; 
     23 
     24import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     25import uk.ac.cardiff.raptormua.engine.statistics.processor.AbstractStatisticPostProcessor; 
     26import uk.ac.cardiff.raptormua.engine.statistics.processor.PostprocessorException; 
     27import uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate; 
    2128 
    2229/** 
     
    3138    private final Logger log = LoggerFactory.getLogger(StatisticProcessorFactory.class); 
    3239 
    33     /** the default package name for processors */ 
    34     private static final String DEFAULT_PROCESSOR_PACKAGE = "uk.ac.cardiff.raptormua.engine.statistics.processor."; 
     40    public StatisticPostProcessor getPostProcessor(ProcessorTemplate template, List<MethodParameter> parameters) 
     41            throws StatisticPostProcessorFactoryException { 
    3542 
    36     public StatisticPostProcessor getPostProcessor(String processorName) { 
    37         StatisticPostProcessor processor = null; 
    38         Object processorClass; 
    3943        try { 
    40             processorClass = Class.forName(DEFAULT_PROCESSOR_PACKAGE + processorName); 
    41             if (processorClass instanceof StatisticPostProcessor) { 
    42                 processor = (StatisticPostProcessor) processorClass; 
    43                 log.debug("Processor factory has constructor [{}]", processor); 
    44                 return processor; 
     44            AbstractStatisticPostProcessor processor = 
     45                    (AbstractStatisticPostProcessor) template.getProcessorClass().newInstance(); 
     46            processor.setFriendlyName(template.getProcessorFriendlyName()); 
     47            processor.registerAndSetMethodParameters(parameters); 
     48            // add information about methods from the template to the input. 
     49            if (parameters != null) { 
     50                for (MethodParameter parameter : parameters) { 
     51                    for (MethodParameter templateParameter : template.getMethodParameters()) { 
     52                        log.debug("MethodParameter [{}], template parameter [{}]", parameter.getParameterName(), 
     53                                templateParameter.getParameterName()); 
     54                        if (parameter.getParameterName().equals(templateParameter.getParameterName())) { 
     55                            parameter.setValueType(templateParameter.getValueType()); 
     56                        } 
     57                    } 
     58                } 
    4559            } 
    46         } catch (ClassNotFoundException e) { 
    47             log.error("Unable to create new statistical processor", e); 
     60            log.debug("Returning new processor {}", processor); 
     61            return processor; 
     62        } catch (InstantiationException e) { 
     63            throw new StatisticPostProcessorFactoryException(e); 
     64        } catch (IllegalAccessException e) { 
     65            throw new StatisticPostProcessorFactoryException(e); 
     66        } catch (PostprocessorException e) { 
     67            throw new StatisticPostProcessorFactoryException(e); 
    4868        } 
    4969 
    50         return processor; 
    5170    } 
    52  
    5371} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/StatisticProcessorRegistry.java

    r1097 r1205  
    1717package uk.ac.cardiff.raptormua.engine.statistics; 
    1818 
     19import java.util.List; 
     20 
    1921import uk.ac.cardiff.model.wsmodel.ProcessorInformation; 
     22import uk.ac.cardiff.raptormua.engine.statistics.processor.ProcessorTemplate; 
    2023 
    2124public interface StatisticProcessorRegistry { 
    2225 
    23     public void addPostProcessor(ProcessorInformation processorInformation); 
     26    /** 
     27     * Gets an instantiated {@link StatisticPostProcessor} from the processor registry based on the 
     28     * <code>processorInformation</code>. 
     29     *  
     30     * @param processorInformation information from which to generate a {@link StatisticPostProcessor}. 
     31     * @return a {@link StatisticPostProcessor}. 
     32     *  
     33     * @throws ProcessorRegistryException 
     34     * @throws StatisticPostProcessorFactoryException 
     35     */ 
     36    public StatisticPostProcessor getProcessor(ProcessorInformation processorInformation) 
     37            throws ProcessorRegistryException, StatisticPostProcessorFactoryException; 
     38 
     39    /** 
     40     * Gets all the registered statistic processor templates. 
     41     *  
     42     * @return a list of {@link ProcessorTemplate}. 
     43     */ 
     44    public List<ProcessorTemplate> getStatisticProcessorTemplates(); 
    2445 
    2546} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/StatisticRegistry.java

    r1175 r1205  
    5252    public List<BaseStatistic> getStatisticalUnits(); 
    5353 
     54    /** 
     55     * Allows access to the implemented {@link StatisticProcessorRegistry} used by this statistic registry. 
     56     *  
     57     * @return the {@link StatisticProcessorRegistry} which holds statistical processor information. 
     58     */ 
     59    public StatisticProcessorRegistry getStatisticProcessorRegistry(); 
     60 
    5461} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/functions/CountEntry.java

    r1185 r1205  
    1414 * limitations under the License. 
    1515 */ 
     16 
    1617package uk.ac.cardiff.raptormua.engine.statistics.functions; 
    1718 
    18 import java.util.ArrayList; 
    1919import java.util.List; 
    2020 
     
    2424 
    2525import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     26import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2627import uk.ac.cardiff.model.wsmodel.StatisticParameters; 
    2728import uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic; 
     
    3031import uk.ac.cardiff.raptormua.engine.statistics.records.ObservationSeries; 
    3132 
    32 public class CountEntry extends BaseStatistic{ 
     33public class CountEntry extends BaseStatistic { 
    3334 
    34         /** Class logger */ 
    35         private final Logger log = LoggerFactory.getLogger(CountEntry.class); 
     35    /** Class logger */ 
     36    private final Logger log = LoggerFactory.getLogger(CountEntry.class); 
    3637 
    37         public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) throws StatisticalUnitException { 
     38    public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) 
     39            throws StatisticalUnitException { 
    3840 
    39                 if (methodParams.size()!=1) 
    40                         throw new StatisticalUnitException("incorrect method parameters"); 
     41        if (methodParams.size() != 1) 
     42            throw new StatisticalUnitException("incorrect method parameters"); 
    4143 
    42                 String numberOfIntervalsString = methodParams.get(0).getValue(); 
     44        String numberOfIntervalsString; 
     45        try { 
     46            numberOfIntervalsString = methodParams.get(0).getValue(String.class); 
     47        } catch (MethodParameterNotOfRequiredTypeException e) { 
     48            throw new StatisticalUnitException(e); 
     49        } 
    4350 
    44                 int numberOfIntervals = Integer.parseInt(numberOfIntervalsString); 
    45                 log.debug("Performing countEntry Statistical Operation"); 
    46                 log.debug("Params for method:  {}, {} ",this.getClass().getSimpleName(),statisticParameters.getUnitName()); 
     51        int numberOfIntervals = Integer.parseInt(numberOfIntervalsString); 
     52        log.debug("Performing countEntry Statistical Operation"); 
     53        log.debug("Params for method:  {}, {} ", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
    4754 
    48                 /* divide the temporal extent into evenly sized buckets */ 
    49                 DateTime start = startingTime(); 
    50                 DateTime end = endingTime(); 
    51                 log.debug("countEntry between [start:{}] [end:{}]", start, end); 
    52                 long difference = end.getMillis() - start.getMillis(); 
    53                 log.debug("There is " + difference + "ms difference between start and end entries"); 
    54                 long timeIntervalsInMs = (long) (difference / numberOfIntervals); 
    55                 long reminder = difference % numberOfIntervals; 
    56                 log.debug("There are " + numberOfIntervals + " buckets, with reminder " + reminder + "ms"); 
     55        /* divide the temporal extent into evenly sized buckets */ 
     56        DateTime start = startingTime(); 
     57        DateTime end = endingTime(); 
     58        log.debug("countEntry between [start:{}] [end:{}]", start, end); 
     59        long difference = end.getMillis() - start.getMillis(); 
     60        log.debug("There is " + difference + "ms difference between start and end entries"); 
     61        long timeIntervalsInMs = (long) (difference / numberOfIntervals); 
     62        long reminder = difference % numberOfIntervals; 
     63        log.debug("There are " + numberOfIntervals + " buckets, with reminder " + reminder + "ms"); 
    5764 
    58                 if (difference < 0){ 
    59                         log.error("Possible statistical parameter error, negative time difference, try swapping the start and end times"); 
    60                         throw new StatisticalUnitException("negative time difference"); 
    61                 } 
     65        if (difference < 0) { 
     66            log.error("Possible statistical parameter error, negative time difference, try swapping the start and end times"); 
     67            throw new StatisticalUnitException("negative time difference"); 
     68        } 
    6269 
    63                 String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
    64                 log.debug("Resource Category Filter {}",resourceCategoryFilter); 
     70        String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
     71        log.debug("Resource Category Filter {}", resourceCategoryFilter); 
    6572 
    66                 /* now create that many buckets of length timeIntervalInt */ 
    67                 Bucket[] buckets = null; 
    68                 if (reminder > 0) 
    69                         buckets = new Bucket[numberOfIntervals + 1]; // add 1 for the 
    70                                                                                                                         // reminder 
    71                 else 
    72                         buckets = new Bucket[numberOfIntervals]; 
     73        /* now create that many buckets of length timeIntervalInt */ 
     74        Bucket[] buckets = null; 
     75        if (reminder > 0) 
     76            buckets = new Bucket[numberOfIntervals + 1]; // add 1 for the 
     77                                                         // reminder 
     78        else 
     79            buckets = new Bucket[numberOfIntervals]; 
    7380 
    74                 buckets[0] = new Bucket(); 
    75                 buckets[0].setStart(start); 
    76                 buckets[0].setEnd(new DateTime(start.getMillis() + timeIntervalsInMs)); 
    77                 DateTime endOfEvenBuckets = null; 
    78                 for (int i = 1; i < numberOfIntervals; i++) { 
    79                         Bucket buck = new Bucket(); 
    80                         buck.setStart(buckets[i - 1].getEnd()); 
    81                         buck.setEnd(new DateTime(buckets[i - 1].getEnd().getMillis() + timeIntervalsInMs)); 
    82                         buckets[i] = buck; 
    83                         endOfEvenBuckets = buck.getEnd(); 
    84                 } 
     81        buckets[0] = new Bucket(); 
     82        buckets[0].setStart(start); 
     83        buckets[0].setEnd(new DateTime(start.getMillis() + timeIntervalsInMs)); 
     84        DateTime endOfEvenBuckets = null; 
     85        for (int i = 1; i < numberOfIntervals; i++) { 
     86            Bucket buck = new Bucket(); 
     87            buck.setStart(buckets[i - 1].getEnd()); 
     88            buck.setEnd(new DateTime(buckets[i - 1].getEnd().getMillis() + timeIntervalsInMs)); 
     89            buckets[i] = buck; 
     90            endOfEvenBuckets = buck.getEnd(); 
     91        } 
    8592 
    86                 /* 
    87                  * there may only be a reminder if the time frame specified is not big 
    88                  * enough to fit the interval specified, in this case the 
    89                  * endOfEvenBuckets has not been set, and it needs setting to the 
    90                  * current starttime. 
    91                  */ 
    92                 boolean hasOnlyReminder = false; 
    93                 if (endOfEvenBuckets == null) { 
    94                         hasOnlyReminder = true; 
    95                         endOfEvenBuckets = start; 
    96                 } 
     93        /* 
     94         * there may only be a reminder if the time frame specified is not big enough to fit the interval specified, in 
     95         * this case the endOfEvenBuckets has not been set, and it needs setting to the current starttime. 
     96         */ 
     97        boolean hasOnlyReminder = false; 
     98        if (endOfEvenBuckets == null) { 
     99            hasOnlyReminder = true; 
     100            endOfEvenBuckets = start; 
     101        } 
    97102 
    98                 if (reminder > 0) { 
    99                         /* 
    100                          * now do something with the reminder, create a bucket from the last 
    101                          * entry, to the maximum temporal extent of all entries 
    102                         */ 
    103                         Bucket reminderBucket = new Bucket(); 
    104                         reminderBucket.setStart(endOfEvenBuckets); 
    105                         if (!hasOnlyReminder) 
    106                                 reminderBucket.setEnd(end); 
    107                         else 
    108                                 reminderBucket.setEnd(new DateTime(start.getMillis() + end.getMillis())); 
    109                         buckets[buckets.length - 1] = reminderBucket; 
    110                 } 
     103        if (reminder > 0) { 
     104            /* 
     105             * now do something with the reminder, create a bucket from the last entry, to the maximum temporal extent 
     106             * of all entries 
     107            */ 
     108            Bucket reminderBucket = new Bucket(); 
     109            reminderBucket.setStart(endOfEvenBuckets); 
     110            if (!hasOnlyReminder) 
     111                reminderBucket.setEnd(end); 
     112            else 
     113                reminderBucket.setEnd(new DateTime(start.getMillis() + end.getMillis())); 
     114            buckets[buckets.length - 1] = reminderBucket; 
     115        } 
    111116 
    112                 long testCount = 0; 
    113                 for (Bucket bucket : buckets) { 
    114                         /* SQL between is >= start && <= end. We want, >= start && < end, so 
    115                         * must exclude equals end 
    116                         */ 
    117                         String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
    118                         String query=""; 
    119                         if (sqlWhere.equals("")) 
    120                                 query ="select count(*) from "+tableName+" where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory "+resourceCategoryFilter; 
    121                         else 
    122                                 query ="select count(*) from "+tableName+" where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory "+resourceCategoryFilter+" and "+sqlWhere; 
     117        long testCount = 0; 
     118        for (Bucket bucket : buckets) { 
     119            /* 
     120             * SQL between is >= start && <= end. We want, >= start && < end, so must exclude equals end 
     121             */ 
     122            String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
     123            String query = ""; 
     124            if (sqlWhere.equals("")) 
     125                query = 
     126                        "select count(*) from " + tableName 
     127                                + " where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory " 
     128                                + resourceCategoryFilter; 
     129            else 
     130                query = 
     131                        "select count(*) from " + tableName 
     132                                + " where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory " 
     133                                + resourceCategoryFilter + " and " + sqlWhere; 
    123134 
    124                         Object[] params = new Object[]{bucket.getStart(),bucket.getEnd(),bucket.getEnd()}; 
    125                         Long count = (Long) this.getEventHandler().queryUnique(query,params); 
    126                         bucket.setValue(count); 
    127                         testCount += bucket.getValue(); 
    128                 } 
     135            Object[] params = new Object[] {bucket.getStart(), bucket.getEnd(), bucket.getEnd()}; 
     136            Long count = (Long) this.getEventHandler().queryUnique(query, params); 
     137            bucket.setValue(count); 
     138            testCount += bucket.getValue(); 
     139        } 
    129140 
    130                 /* 
    131                  * test count should equal the number of entries unless there is a 
    132                  * reminder, or the specified start time and endtime does not completely 
    133                  * contain the entries. 
    134                  */ 
    135                 log.debug("Events: " + this.getEventHandler().getNumberOfEvents() + ", total in buckets: " + testCount); 
     141        /* 
     142         * test count should equal the number of entries unless there is a reminder, or the specified start time and 
     143         * endtime does not completely contain the entries. 
     144         */ 
     145        log.debug("Events: " + this.getEventHandler().getNumberOfEvents() + ", total in buckets: " + testCount); 
    136146 
    137                 ObservationSeries series= new ObservationSeries(); 
    138                 series.setObservations(buckets); 
    139                 getObservationSeries().add(series); 
     147        ObservationSeries series = new ObservationSeries(); 
     148        series.setObservations(buckets); 
     149        getObservationSeries().add(series); 
    140150 
    141                 return true; 
     151        return true; 
    142152 
    143         } 
     153    } 
    144154 
    145         @Override 
    146         public void setStatisticParameters(StatisticParameters statisticParameters) { 
    147                 List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
    148                 if (methodParams.size()==1){ 
    149                         methodParams.get(0).setParameterName("Number of Intervals"); 
    150                         methodParams.get(0).setParameterType(MethodParameter.ParameterType.VALUE); 
    151                 } 
    152                 else{ 
    153                         log.error("Unable to set parameter type for statistic {}, incorrect number of parameters",this.getClass().getSimpleName()); 
    154                 } 
    155                 this.statisticParameters = statisticParameters; 
     155    @Override 
     156    public void setStatisticParameters(StatisticParameters statisticParameters) { 
     157        List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
     158        if (methodParams.size() == 1) { 
     159            methodParams.get(0).setParameterName("Number of Intervals"); 
     160            methodParams.get(0).setParameterType(MethodParameter.ParameterType.VALUE); 
     161        } else { 
     162            log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass() 
     163                    .getSimpleName()); 
     164        } 
     165        this.statisticParameters = statisticParameters; 
    156166 
    157         } 
     167    } 
    158168 
    159169} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/functions/CountEntryPerInterval.java

    r1185 r1205  
    1414 * limitations under the License. 
    1515 */ 
     16 
    1617package uk.ac.cardiff.raptormua.engine.statistics.functions; 
    1718 
    18 import java.util.ArrayList; 
    1919import java.util.List; 
    2020 
     
    2424 
    2525import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     26import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
     27import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2628import uk.ac.cardiff.model.wsmodel.StatisticParameters; 
    27 import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
    2829import uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic; 
    2930import uk.ac.cardiff.raptormua.engine.statistics.StatisticalUnitException; 
     
    3132import uk.ac.cardiff.raptormua.engine.statistics.records.ObservationSeries; 
    3233 
    33 public class CountEntryPerInterval extends BaseStatistic{ 
     34public class CountEntryPerInterval extends BaseStatistic { 
    3435 
    35         static Logger log = LoggerFactory.getLogger(CountEntryPerInterval.class); 
     36    static Logger log = LoggerFactory.getLogger(CountEntryPerInterval.class); 
    3637 
     38    /** 
     39     * <p> 
     40     * returns false if semantic error with the entries, throws an exception on code failure 
     41     * </p> 
     42     *  
     43     * @param timeInterval - assumes a String representing minutes 
     44     * @param sqlWhere if a SQL filter has been attached to the statistical unit, it is inputed to the method if there 
     45     *            is not SQL filter, it comes through as an empty string (not null) 
     46     * @return 
     47     * @throws StatisticalUnitException 
     48     */ 
     49    public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) 
     50            throws StatisticalUnitException { 
    3751 
    38         /** 
    39          * <p> 
    40          * returns false if semantic error with the entries, throws an exception on 
    41          * code failure 
    42          * </p> 
    43          * 
    44          * @param timeInterval 
    45          *            - assumes a String representing minutes 
    46          * @param sqlWhere if a SQL filter has been attached to the statistical unit, it is inputed to the method 
    47          *                                      if there is not SQL filter, it comes through as an empty string (not null) 
    48          * @return 
    49          * @throws StatisticalUnitException 
    50          */ 
    51         public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) throws StatisticalUnitException { 
     52        if (methodParams.size() != 1) 
     53            throw new StatisticalUnitException("incorrect method parameters"); 
    5254 
    53                 if (methodParams.size()!=1) 
    54                         throw new StatisticalUnitException("incorrect method parameters"); 
     55        String timeInterval; 
     56        try { 
     57            timeInterval = methodParams.get(0).getValue(String.class); 
     58        } catch (MethodParameterNotOfRequiredTypeException e) { 
     59            throw new StatisticalUnitException(e); 
     60        } 
    5561 
    56                 String timeInterval = methodParams.get(0).getValue(); 
     62        log.debug("Performing countEntryPerInterval Statistical Operation"); 
     63        int timeIntervalInt = Integer.parseInt(timeInterval); 
     64        // convert minutes to ms for the procedure 
     65        timeIntervalInt = timeIntervalInt * 60 * 1000; 
     66        log.debug("Params for method:  {}, {}. SQL Filter {}", new Object[] {this.getClass().getSimpleName(), 
     67                statisticParameters.getUnitName(), sqlWhere}); 
    5768 
    58                 log.debug("Performing countEntryPerInterval Statistical Operation"); 
    59                 int timeIntervalInt = Integer.parseInt(timeInterval); 
    60                 // convert minutes to ms for the procedure 
    61                 timeIntervalInt = timeIntervalInt * 60 * 1000; 
    62                 log.debug("Params for method:  {}, {}. SQL Filter {}", new Object[]{this.getClass().getSimpleName(), statisticParameters.getUnitName(),sqlWhere}); 
     69        /* divide the temporal extent into evenly sized buckets */ 
     70        DateTime start = startingTime(); 
     71        DateTime end = endingTime(); 
     72        log.debug("countEntryPerInterval between [start:{}] [end:{}]", start, end); 
     73        long difference = end.getMillis() - start.getMillis(); 
     74        log.debug("There is " + difference + "ms difference between start and end entries"); 
     75        int numberOfBuckets = (int) (difference / timeIntervalInt); 
     76        long reminder = difference % timeIntervalInt; 
     77        log.debug("There are " + numberOfBuckets + " buckets, with reminder " + reminder + "ms"); 
    6378 
    64                 /* divide the temporal extent into evenly sized buckets */ 
    65                 DateTime start = startingTime(); 
    66                 DateTime end = endingTime(); 
    67                 log.debug("countEntryPerInterval between [start:{}] [end:{}]", start, end); 
    68                 long difference = end.getMillis() - start.getMillis(); 
    69                 log.debug("There is " + difference + "ms difference between start and end entries"); 
    70                 int numberOfBuckets = (int) (difference / timeIntervalInt); 
    71                 long reminder = difference % timeIntervalInt; 
    72                 log.debug("There are " + numberOfBuckets + " buckets, with reminder " + reminder + "ms"); 
     79        if (difference < 0) { 
     80            log.error("Possible statistical parameter error, negative time difference, try swapping the start and end times"); 
     81            throw new StatisticalUnitException("negative time difference"); 
     82        } 
    7383 
    74                 if (difference < 0){ 
    75                         log.error("Possible statistical parameter error, negative time difference, try swapping the start and end times"); 
    76                         throw new StatisticalUnitException("negative time difference"); 
    77                 } 
     84        String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
     85        log.debug("Resource Category Filter {}", resourceCategoryFilter); 
    7886 
    79                 String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
    80                 log.debug("Resource Category Filter {}",resourceCategoryFilter); 
     87        /* now create that many buckets of length timeIntervalInt */ 
     88        Bucket[] buckets = null; 
     89        if (reminder > 0) 
     90            buckets = new Bucket[numberOfBuckets + 1]; // add 1 for the reminder 
     91        else 
     92            buckets = new Bucket[numberOfBuckets]; 
    8193 
    82                 /* now create that many buckets of length timeIntervalInt */ 
    83                 Bucket[] buckets = null; 
    84                 if (reminder > 0) 
    85                         buckets = new Bucket[numberOfBuckets + 1]; // add 1 for the reminder 
    86                 else 
    87                         buckets = new Bucket[numberOfBuckets]; 
     94        buckets[0] = new Bucket(); 
     95        buckets[0].setStart(start); 
     96        buckets[0].setEnd(new DateTime(start.getMillis() + timeIntervalInt)); 
     97        DateTime endOfEvenBuckets = null; 
     98        for (int i = 1; i < numberOfBuckets; i++) { 
     99            Bucket buck = new Bucket(); 
     100            buck.setStart(buckets[i - 1].getEnd()); 
     101            buck.setEnd(new DateTime(buckets[i - 1].getEnd().getMillis() + timeIntervalInt)); 
     102            buckets[i] = buck; 
     103            endOfEvenBuckets = buck.getEnd(); 
     104        } 
    88105 
    89                 buckets[0] = new Bucket(); 
    90                 buckets[0].setStart(start); 
    91                 buckets[0].setEnd(new DateTime(start.getMillis() + timeIntervalInt)); 
    92                 DateTime endOfEvenBuckets = null; 
    93                 for (int i = 1; i < numberOfBuckets; i++) { 
    94                         Bucket buck = new Bucket(); 
    95                         buck.setStart(buckets[i - 1].getEnd()); 
    96                         buck.setEnd(new DateTime(buckets[i - 1].getEnd().getMillis() + timeIntervalInt)); 
    97                         buckets[i] = buck; 
    98                         endOfEvenBuckets = buck.getEnd(); 
    99                 } 
     106        /* 
     107         * there may only be a reminder if the time frame specified is not big enough to fit the interval specified, in 
     108         * this case the endOfEvenBuckets has not been set, and it needs setting to the current starttime. 
     109         */ 
     110        boolean hasOnlyReminder = false; 
     111        if (endOfEvenBuckets == null) { 
     112            hasOnlyReminder = true; 
     113            endOfEvenBuckets = start; 
     114        } 
    100115 
    101                 /* 
    102                  * there may only be a reminder if the time frame specified is not big 
    103                  * enough to fit the interval specified, in this case the 
    104                  * endOfEvenBuckets has not been set, and it needs setting to the 
    105                  * current starttime. 
    106                  */ 
    107                 boolean hasOnlyReminder = false; 
    108                 if (endOfEvenBuckets == null) { 
    109                         hasOnlyReminder = true; 
    110                         endOfEvenBuckets = start; 
    111                 } 
     116        if (reminder > 0) { 
     117            /* 
     118             * now do something with the reminder, create a bucket from the last entry, to the maximum temporal extent 
     119             * of all entries 
     120             */ 
     121            Bucket reminderBucket = new Bucket(); 
     122            reminderBucket.setStart(endOfEvenBuckets); 
     123            if (!hasOnlyReminder) 
     124                reminderBucket.setEnd(end); 
     125            else 
     126                reminderBucket.setEnd(new DateTime(start.getMillis() + end.getMillis())); 
     127            buckets[buckets.length - 1] = reminderBucket; 
     128        } 
    112129 
    113                 if (reminder > 0) { 
    114                         /* 
    115                          * now do something with the reminder, create a bucket from the last 
    116                          * entry, to the maximum temporal extent of all entries 
    117                          */ 
    118                         Bucket reminderBucket = new Bucket(); 
    119                         reminderBucket.setStart(endOfEvenBuckets); 
    120                         if (!hasOnlyReminder) 
    121                                 reminderBucket.setEnd(end); 
    122                         else 
    123                                 reminderBucket.setEnd(new DateTime(start.getMillis() + end.getMillis())); 
    124                         buckets[buckets.length - 1] = reminderBucket; 
    125                 } 
     130        long testCount = 0; 
     131        String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
     132        for (Bucket bucket : buckets) { 
     133            /* 
     134             * SQL between is >= start && <= end. We want, >= start && < end, so must exclude equals end 
     135             */ 
     136            String query = null; 
     137            if (sqlWhere.equals("")) 
     138                query = 
     139                        "select count(*) from " + tableName 
     140                                + " where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory " 
     141                                + resourceCategoryFilter; 
     142            else 
     143                query = 
     144                        "select count(*) from " + tableName 
     145                                + " where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory " 
     146                                + resourceCategoryFilter + " and " + sqlWhere; 
    126147 
    127                 long testCount = 0; 
    128                 String tableName= statisticParameters.getEventType().getHibernateSimpleClassName(); 
    129                 for (Bucket bucket : buckets) { 
    130                         /*SQL between is >= start && <= end. We want, >= start && < end, so 
    131                         * must exclude equals end 
    132                         */ 
    133                         String query=null; 
    134                         if (sqlWhere.equals("")) 
    135                                 query ="select count(*) from "+tableName+" where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory "+resourceCategoryFilter; 
    136                         else 
    137                                 query ="select count(*) from "+tableName+" where (eventTime between ? and ?) and (eventTime !=?) and resourceIdCategory "+resourceCategoryFilter+" and "+sqlWhere; 
     148            Object[] params = new Object[] {bucket.getStart(), bucket.getEnd(), bucket.getEnd()}; 
    138149 
    139                         Object[] params = new Object[]{bucket.getStart(),bucket.getEnd(),bucket.getEnd()}; 
     150            Long count = (Long) this.getEventHandler().queryUnique(query, params); 
     151            bucket.setValue(count); 
     152            testCount += bucket.getValue(); 
     153        } 
    140154 
    141                         Long count = (Long) this.getEventHandler().queryUnique(query,params); 
    142                         bucket.setValue(count); 
    143                         testCount += bucket.getValue(); 
    144                 } 
     155        log.debug("Entries: " + this.getEventHandler().getNumberOfEvents() + ", total in buckets: " + testCount); 
    145156 
     157        ObservationSeries series = new ObservationSeries(); 
     158        series.setObservations(buckets); 
     159        getObservationSeries().add(series); 
    146160 
    147                 log.debug("Entries: " + this.getEventHandler().getNumberOfEvents() + ", total in buckets: " + testCount); 
     161        // finished successfully, no exception thrown 
     162        return true; 
    148163 
     164    } 
    149165 
    150                 ObservationSeries series=  new ObservationSeries(); 
    151                 series.setObservations(buckets); 
    152                 getObservationSeries().add(series); 
     166    @Override 
     167    public void setStatisticParameters(StatisticParameters statisticParameters) { 
     168        List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
     169        if (methodParams.size() == 1) { 
     170            methodParams.get(0).setParameterName("Time Interval (minutes)"); 
     171            methodParams.get(0).setParameterType(ParameterType.VALUE); 
     172        } else { 
     173            log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass() 
     174                    .getSimpleName()); 
     175        } 
     176        this.statisticParameters = statisticParameters; 
    153177 
    154                 // finished successfully, no exception thrown 
    155                 return true; 
    156  
    157         } 
    158  
    159  
    160         @Override 
    161         public void setStatisticParameters(StatisticParameters statisticParameters) { 
    162                 List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
    163                 if (methodParams.size()==1){ 
    164                         methodParams.get(0).setParameterName("Time Interval (minutes)"); 
    165                         methodParams.get(0).setParameterType(ParameterType.VALUE); 
    166                 } 
    167                 else{ 
    168                         log.error("Unable to set parameter type for statistic {}, incorrect number of parameters",this.getClass().getSimpleName()); 
    169                 } 
    170                 this.statisticParameters = statisticParameters; 
    171  
    172         } 
     178    } 
    173179 
    174180} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/functions/GroupBy.java

    r1185 r1205  
    1414 * limitations under the License. 
    1515 */ 
     16 
    1617package uk.ac.cardiff.raptormua.engine.statistics.functions; 
    1718 
     
    2425 
    2526import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     27import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
     28import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2629import uk.ac.cardiff.model.wsmodel.StatisticParameters; 
    27 import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
    28 import uk.ac.cardiff.raptor.runtimeutils.ReflectionHelper; 
    2930import uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic; 
    3031import uk.ac.cardiff.raptormua.engine.statistics.StatisticalUnitException; 
     
    3233import uk.ac.cardiff.raptormua.engine.statistics.records.ObservationSeries; 
    3334 
    34 public class GroupBy extends BaseStatistic{ 
     35public class GroupBy extends BaseStatistic { 
    3536 
    36         /** Class logger */ 
    37         private final Logger log = LoggerFactory.getLogger(GroupByCountDistinct.class); 
     37    /** Class logger */ 
     38    private final Logger log = LoggerFactory.getLogger(GroupByCountDistinct.class); 
    3839 
    39         /** 
    40          * Perform the groupByField statistic. This statistic returns a list of 
    41          * distinct values of the given <code>groupByField</code> field. In contrast 
    42          * to the <code>groupByFrequency</code> method, it does not count the 
    43          * occurrence that each distinct value occurs. It is the responsibility of 
    44          * this method to throw a <code>StatisticalUnitException</code> if the code 
    45          * logic fails, or return false if the statistic functioned correctly, but 
    46          * there are no valid observations, or true if the statistic succeeds and 
    47          * there are valid observations. 
    48          * 
    49          * @param groupByField 
    50          * @return true if the statistic succeeds successfully 
    51          * @throws StatisticalUnitException 
    52          */ 
    53         public Boolean  performStatistic(List<MethodParameter> methodParams, String sqlWhere) throws StatisticalUnitException { 
     40    /** 
     41     * Perform the groupByField statistic. This statistic returns a list of distinct values of the given 
     42     * <code>groupByField</code> field. In contrast to the <code>groupByFrequency</code> method, it does not count the 
     43     * occurrence that each distinct value occurs. It is the responsibility of this method to throw a 
     44     * <code>StatisticalUnitException</code> if the code logic fails, or return false if the statistic functioned 
     45     * correctly, but there are no valid observations, or true if the statistic succeeds and there are valid 
     46     * observations. 
     47     *  
     48     * @param groupByField 
     49     * @return true if the statistic succeeds successfully 
     50     * @throws StatisticalUnitException 
     51     */ 
     52    public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) 
     53            throws StatisticalUnitException { 
    5454 
    55                 if (methodParams.size()!=1) 
    56                         throw new StatisticalUnitException("incorrect method parameters"); 
     55        if (methodParams.size() != 1) 
     56            throw new StatisticalUnitException("incorrect method parameters"); 
    5757 
    58                 String groupByField = methodParams.get(0).getValue(); 
     58        String groupByField; 
     59        try { 
     60            groupByField = methodParams.get(0).getValue(String.class); 
     61        } catch (MethodParameterNotOfRequiredTypeException e) { 
     62            throw new StatisticalUnitException(e); 
     63        } 
    5964 
    60                 log.debug("Performing groupByFrequency Statistical Operation"); 
    61                 log.debug("Params for method:  {},{}", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
    62                 log.debug("Grouping field: {}", groupByField); 
     65        log.debug("Performing groupByFrequency Statistical Operation"); 
     66        log.debug("Params for method:  {},{}", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
     67        log.debug("Grouping field: {}", groupByField); 
    6368 
    64                 DateTime start = startingTime(); 
    65                 DateTime end = endingTime(); 
    66                 log.debug("groupBy between [start:{}] [end:{}]", start, end); 
    67                 String tableName= statisticParameters.getEventType().getHibernateSimpleClassName(); 
    68                 log.debug("Select {}, tableName {}", groupByField, tableName); 
     69        DateTime start = startingTime(); 
     70        DateTime end = endingTime(); 
     71        log.debug("groupBy between [start:{}] [end:{}]", start, end); 
     72        String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
     73        log.debug("Select {}, tableName {}", groupByField, tableName); 
    6974 
    70                 String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
    71                 log.debug("Resource Category Filter {}",resourceCategoryFilter); 
     75        String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
     76        log.debug("Resource Category Filter {}", resourceCategoryFilter); 
    7277 
    73                 String query=""; 
     78        String query = ""; 
    7479 
    75                 if (sqlWhere.equals("")) { 
    76                         query = "select "+groupByField+" from "+tableName+" where (eventTime between ? and ?) and resourceIdCategory "+resourceCategoryFilter+" group by ("+groupByField+")"; 
    77                 } else { 
    78                         query = "select "+groupByField+" from "+tableName+" where (eventTime between ? and ?) and resourceIdCategory "+resourceCategoryFilter+" and "+sqlWhere+" group by ("+groupByField+")"; 
    79                 } 
     80        if (sqlWhere.equals("")) { 
     81            query = 
     82                    "select " + groupByField + " from " + tableName 
     83                            + " where (eventTime between ? and ?) and resourceIdCategory " + resourceCategoryFilter 
     84                            + " group by (" + groupByField + ")"; 
     85        } else { 
     86            query = 
     87                    "select " + groupByField + " from " + tableName 
     88                            + " where (eventTime between ? and ?) and resourceIdCategory " + resourceCategoryFilter 
     89                            + " and " + sqlWhere + " group by (" + groupByField + ")"; 
     90        } 
    8091 
     92        Object[] params = new Object[] {start, end}; 
    8193 
    82                 Object[] params = new Object[]{start,end}; 
     94        List results = getEventHandler().query(query, params); 
    8395 
    84                 List results = getEventHandler().query(query,params); 
     96        ArrayList<Group> groups = new ArrayList(); 
     97        for (Object result : results) { 
     98            Object resultAsArray = (Object) result; 
     99            Group group = new Group(); 
     100            group.setValue(0); 
     101            if (resultAsArray != null) { 
     102                group.setGroupName((String) resultAsArray); 
     103            } else { 
     104                group.setGroupName("NA"); 
     105            } 
     106            groups.add(group); 
    85107 
    86                 ArrayList<Group> groups = new ArrayList(); 
    87                 for (Object result : results) { 
    88                         Object resultAsArray = (Object) result; 
    89                         Group group = new Group(); 
    90                         group.setValue(0); 
    91                         if (resultAsArray!=null){ 
    92                             group.setGroupName((String) resultAsArray); 
    93                         } 
    94                         else{ 
    95                             group.setGroupName("NA"); 
    96                         } 
    97                         groups.add(group); 
     108        } 
    98109 
    99                 } 
     110        if (groups.size() == 0) 
     111            return false; 
    100112 
     113        // finished successfully, no exception thrown 
     114        ObservationSeries series = new ObservationSeries(); 
     115        series.setObservations(groups.toArray(new Group[0])); 
     116        getObservationSeries().add(series); 
    101117 
    102                 if (groups.size() == 0) 
    103                         return false; 
     118        // finished successfully, no exception thrown 
     119        return true; 
    104120 
    105                 // finished successfully, no exception thrown 
    106                 ObservationSeries series=  new ObservationSeries(); 
    107                 series.setObservations(groups.toArray(new Group[0])); 
    108                 getObservationSeries().add(series); 
     121    } 
    109122 
    110                 // finished successfully, no exception thrown 
    111                 return true; 
     123    @Override 
     124    public void setStatisticParameters(StatisticParameters statisticParameters) { 
     125        List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
     126        if (methodParams.size() == 1) { 
     127            methodParams.get(0).setParameterName("Group By Field"); 
     128            methodParams.get(0).setParameterType(ParameterType.FIELD); 
     129        } else { 
     130            log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass() 
     131                    .getSimpleName()); 
     132        } 
     133        this.statisticParameters = statisticParameters; 
    112134 
    113         } 
    114  
    115         @Override 
    116         public void setStatisticParameters(StatisticParameters statisticParameters) { 
    117                 List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
    118                 if (methodParams.size()==1){ 
    119                         methodParams.get(0).setParameterName("Group By Field"); 
    120                         methodParams.get(0).setParameterType(ParameterType.FIELD); 
    121                 } 
    122                 else{ 
    123                         log.error("Unable to set parameter type for statistic {}, incorrect number of parameters",this.getClass().getSimpleName()); 
    124                 } 
    125                 this.statisticParameters = statisticParameters; 
    126  
    127         } 
     135    } 
    128136 
    129137} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/functions/GroupByCountDistinct.java

    r1185 r1205  
    1414 * limitations under the License. 
    1515 */ 
     16 
    1617package uk.ac.cardiff.raptormua.engine.statistics.functions; 
    1718 
     
    2425 
    2526import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     27import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
     28import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2629import uk.ac.cardiff.model.wsmodel.StatisticParameters; 
    27 import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
    28 import uk.ac.cardiff.raptor.runtimeutils.ReflectionException; 
    29 import uk.ac.cardiff.raptor.runtimeutils.ReflectionHelper; 
    3030import uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic; 
    3131import uk.ac.cardiff.raptormua.engine.statistics.StatisticalUnitException; 
     
    3535public class GroupByCountDistinct extends BaseStatistic { 
    3636 
    37         /** Class logger */ 
    38         private final Logger log = LoggerFactory.getLogger(GroupByCountDistinct.class); 
     37    /** Class logger */ 
     38    private final Logger log = LoggerFactory.getLogger(GroupByCountDistinct.class); 
    3939 
    40         public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) throws StatisticalUnitException { 
     40    public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) 
     41            throws StatisticalUnitException { 
    4142 
    42                 if (methodParams.size() != 2) 
    43                         throw new StatisticalUnitException("incorrect method parameters"); 
     43        if (methodParams.size() != 2) 
     44            throw new StatisticalUnitException("incorrect method parameters"); 
    4445 
    45                 String groupByField = methodParams.get(0).getValue(); 
    46                 String countDistinctField = methodParams.get(1).getValue(); 
     46        String groupByField; 
     47        String countDistinctField; 
     48        try { 
     49            groupByField = methodParams.get(0).getValue(String.class); 
     50            countDistinctField = methodParams.get(1).getValue(String.class); 
     51        } catch (MethodParameterNotOfRequiredTypeException e) { 
     52            throw new StatisticalUnitException(e); 
     53        } 
    4754 
    48                 log.debug("Performing GroupByCountDistinct Statistical Operation"); 
    49                 log.debug("Params for method:  {},{}", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
    50                 log.debug("Grouping field: {}, count By distinct field {}", groupByField, countDistinctField); 
     55        log.debug("Performing GroupByCountDistinct Statistical Operation"); 
     56        log.debug("Params for method:  {},{}", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
     57        log.debug("Grouping field: {}, count By distinct field {}", groupByField, countDistinctField); 
    5158 
    52                 DateTime start = startingTime(); 
    53                 DateTime end = endingTime(); 
    54                 log.debug("groupByFrequency between [start:{}] [end:{}]", start, end); 
     59        DateTime start = startingTime(); 
     60        DateTime end = endingTime(); 
     61        log.debug("groupByFrequency between [start:{}] [end:{}]", start, end); 
    5562 
    56                 String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
     63        String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
    5764 
    58                 log.debug("Select {}, tableName {}", groupByField, tableName); 
     65        log.debug("Select {}, tableName {}", groupByField, tableName); 
    5966 
    60                 String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
    61                 log.debug("Resource Category Filter {}",resourceCategoryFilter); 
     67        String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
     68        log.debug("Resource Category Filter {}", resourceCategoryFilter); 
    6269 
    63                 String query=""; 
     70        String query = ""; 
    6471 
    65                 if (sqlWhere.equals("")) { 
    66                         query = "select " + groupByField + ",count(distinct " + countDistinctField + ") from " + tableName + " where (eventTime between ?" + 
    67                         " and ?) and resourceIdCategory "+resourceCategoryFilter+" group by (" + groupByField + ")"; 
    68                 } else { 
    69                         query = "select " + groupByField + ",count(distinct " + countDistinctField + ") from " + tableName + " where (eventTime between ?" + 
    70                         " and ?) and resourceIdCategory "+resourceCategoryFilter+" and "+sqlWhere+" group by (" + groupByField + ")"; 
    71                 } 
     72        if (sqlWhere.equals("")) { 
     73            query = 
     74                    "select " + groupByField + ",count(distinct " + countDistinctField + ") from " + tableName 
     75                            + " where (eventTime between ?" + " and ?) and resourceIdCategory " 
     76                            + resourceCategoryFilter + " group by (" + groupByField + ")"; 
     77        } else { 
     78            query = 
     79                    "select " + groupByField + ",count(distinct " + countDistinctField + ") from " + tableName 
     80                            + " where (eventTime between ?" + " and ?) and resourceIdCategory " 
     81                            + resourceCategoryFilter + " and " + sqlWhere + " group by (" + groupByField + ")"; 
     82        } 
    7283 
    73                 Object[] params = new Object[]{start,end}; 
     84        Object[] params = new Object[] {start, end}; 
    7485 
    75                 List results = getEventHandler().query(query,params); 
     86        List results = getEventHandler().query(query, params); 
    7687 
    77                 ArrayList<Group> groups = new ArrayList<Group>(); 
    78                 int testCount = 0; 
    79                 for (Object result : results) { 
    80                         Object[] resultAsArray = (Object[]) result; 
    81                         Group group = new Group(); 
    82                         group.setValue((Long) resultAsArray[1]); 
    83                         group.setGroupName((String) resultAsArray[0]); 
    84                         groups.add(group); 
    85                         testCount += group.getValue(); 
    86                 } 
     88        ArrayList<Group> groups = new ArrayList<Group>(); 
     89        int testCount = 0; 
     90        for (Object result : results) { 
     91            Object[] resultAsArray = (Object[]) result; 
     92            Group group = new Group(); 
     93            group.setValue((Long) resultAsArray[1]); 
     94            group.setGroupName((String) resultAsArray[0]); 
     95            groups.add(group); 
     96            testCount += group.getValue(); 
     97        } 
    8798 
    88                 log.debug("Entries: {}, total in buckets:{} ", this.getEventHandler().getNumberOfEvents(), testCount); 
     99        log.debug("Entries: {}, total in buckets:{} ", this.getEventHandler().getNumberOfEvents(), testCount); 
    89100 
    90                 if (groups.size() == 0) 
    91                         return false; 
     101        if (groups.size() == 0) 
     102            return false; 
    92103 
    93                 // finished successfully, no exception thrown 
    94                 ObservationSeries series = new ObservationSeries(); 
    95                 series.setObservations(groups.toArray(new Group[0])); 
    96                 getObservationSeries().add(series); 
     104        // finished successfully, no exception thrown 
     105        ObservationSeries series = new ObservationSeries(); 
     106        series.setObservations(groups.toArray(new Group[0])); 
     107        getObservationSeries().add(series); 
    97108 
    98                 return true; 
     109        return true; 
    99110 
    100         } 
     111    } 
    101112 
    102         @Override 
    103         public void setStatisticParameters(StatisticParameters statisticParameters) { 
    104                 List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
    105                 if (methodParams.size() == 2) { 
    106                         methodParams.get(0).setParameterName("Group By Field"); 
    107                         methodParams.get(0).setParameterType(ParameterType.FIELD); 
    108                         methodParams.get(1).setParameterName("Count Distinct Field"); 
    109                         methodParams.get(1).setParameterType(ParameterType.FIELD); 
     113    @Override 
     114    public void setStatisticParameters(StatisticParameters statisticParameters) { 
     115        List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
     116        if (methodParams.size() == 2) { 
     117            methodParams.get(0).setParameterName("Group By Field"); 
     118            methodParams.get(0).setParameterType(ParameterType.FIELD); 
     119            methodParams.get(1).setParameterName("Count Distinct Field"); 
     120            methodParams.get(1).setParameterType(ParameterType.FIELD); 
    110121 
    111                 } else { 
    112                         log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass().getSimpleName()); 
    113                 } 
    114                 this.statisticParameters = statisticParameters; 
     122        } else { 
     123            log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass() 
     124                    .getSimpleName()); 
     125        } 
     126        this.statisticParameters = statisticParameters; 
    115127 
    116         } 
     128    } 
    117129 
    118130} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/functions/GroupByFrequency.java

    r1185 r1205  
    1414 * limitations under the License. 
    1515 */ 
     16 
    1617package uk.ac.cardiff.raptormua.engine.statistics.functions; 
    1718 
     
    2425 
    2526import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     27import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
     28import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2629import uk.ac.cardiff.model.wsmodel.StatisticParameters; 
    27 import uk.ac.cardiff.model.wsmodel.MethodParameter.ParameterType; 
    28 import uk.ac.cardiff.raptor.runtimeutils.ReflectionHelper; 
    2930import uk.ac.cardiff.raptormua.engine.statistics.BaseStatistic; 
    3031import uk.ac.cardiff.raptormua.engine.statistics.StatisticalUnitException; 
     
    3435public class GroupByFrequency extends BaseStatistic { 
    3536 
    36         /** Class logger */ 
    37         private final Logger log = LoggerFactory.getLogger(GroupByFrequency.class); 
     37    /** Class logger */ 
     38    private final Logger log = LoggerFactory.getLogger(GroupByFrequency.class); 
    3839 
    39         /** 
    40          * Perform the groupByField statistic. This statistic counts the frequency 
    41          * that each distinct value of the given <code>groupByField</code> occurs in 
    42          * the entry set. It is the responsibility of this method to throw a 
    43          * <code>StatisticalUnitException</code> if the code logic fails, or return 
    44          * false if the statistic functioned correctly, but there are no valid 
    45          * observations, or true if the statistic succeeds and there are valid 
    46          * observations. 
    47          * 
    48          * 
    49          * @param groupByField 
    50          * @return 
    51          * @throws StatisticalUnitException 
    52          */ 
    53         public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) throws StatisticalUnitException { 
     40    /** 
     41     * Perform the groupByField statistic. This statistic counts the frequency that each distinct value of the given 
     42     * <code>groupByField</code> occurs in the entry set. It is the responsibility of this method to throw a 
     43     * <code>StatisticalUnitException</code> if the code logic fails, or return false if the statistic functioned 
     44     * correctly, but there are no valid observations, or true if the statistic succeeds and there are valid 
     45     * observations. 
     46     *  
     47     *  
     48     * @param groupByField 
     49     * @return 
     50     * @throws StatisticalUnitException 
     51     */ 
     52    public Boolean performStatistic(List<MethodParameter> methodParams, String sqlWhere) 
     53            throws StatisticalUnitException { 
    5454 
    55                 if (methodParams.size() != 1) 
    56                         throw new StatisticalUnitException("incorrect method parameters"); 
     55        if (methodParams.size() != 1) { 
     56            throw new StatisticalUnitException("incorrect method parameters"); 
     57        } 
    5758 
    58                 String groupByField = methodParams.get(0).getValue(); 
     59        String groupByField; 
     60        try { 
     61            groupByField = methodParams.get(0).getValue(String.class); 
     62        } catch (MethodParameterNotOfRequiredTypeException e) { 
     63            throw new StatisticalUnitException(e); 
     64        } 
    5965 
    60                 log.debug("Performing groupByFrequency Statistical Operation"); 
    61                 log.debug("Params for method:  {},{}", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
    62                 log.debug("Grouping field: {}", groupByField); 
     66        log.debug("Performing groupByFrequency Statistical Operation"); 
     67        log.debug("Params for method:  {},{}", this.getClass().getSimpleName(), statisticParameters.getUnitName()); 
     68        log.debug("Grouping field: {}", groupByField); 
    6369 
    64                 DateTime start = startingTime(); 
    65                 DateTime end = endingTime(); 
    66                 log.debug("groupByFrequency between [start:{}] [end:{}]", start, end); 
    67                 String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
    68                 log.debug("Select {}, tableName {}", groupByField, tableName); 
    69                  
    70                 String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
    71                 log.debug("Resource Category Filter {}",resourceCategoryFilter); 
     70        DateTime start = startingTime(); 
     71        DateTime end = endingTime(); 
     72        log.debug("groupByFrequency between [start:{}] [end:{}]", start, end); 
     73        String tableName = statisticParameters.getEventType().getHibernateSimpleClassName(); 
     74        log.debug("Select {}, tableName {}", groupByField, tableName); 
    7275 
    73                 String query = ""; 
    74                 if (sqlWhere.equals("")) { 
    75                         query = "select "+groupByField+", count(*) from "+tableName+" where (eventTime between ? and ?) and resourceIdCategory "+resourceCategoryFilter+" group by ("+groupByField+")"; 
    76                 } else { 
    77                         query = "select "+groupByField+", count(*) from "+tableName+" where (eventTime between ? and ?) and resourceIdCategory "+resourceCategoryFilter+" and "+sqlWhere+" group by ("+groupByField+")"; 
    78                 } 
     76        String resourceCategoryFilter = statisticParameters.getResourceCategory().getSql(); 
     77        log.debug("Resource Category Filter {}", resourceCategoryFilter); 
    7978 
    80                 Object[] params = new Object[]{start,end}; 
     79        String query = ""; 
     80        if (sqlWhere.equals("")) { 
     81            query = 
     82                    "select " + groupByField + ", count(*) from " + tableName 
     83                            + " where (eventTime between ? and ?) and resourceIdCategory " + resourceCategoryFilter 
     84                            + " group by (" + groupByField + ")"; 
     85        } else { 
     86            query = 
     87                    "select " + groupByField + ", count(*) from " + tableName 
     88                            + " where (eventTime between ? and ?) and resourceIdCategory " + resourceCategoryFilter 
     89                            + " and " + sqlWhere + " group by (" + groupByField + ")"; 
     90        } 
    8191 
    82                 List results = getEventHandler().query(query,params); 
     92        Object[] params = new Object[] {start, end}; 
    8393 
    84                 ArrayList<Group> groups = new ArrayList<Group>(); 
    85                 int testCount = 0; 
    86                 for (Object result : results) { 
    87                         Object[] resultAsArray = (Object[]) result; 
    88                         Group group = new Group(); 
    89                         try { 
    90                                 group.setValue((Long) resultAsArray[1]); 
    91                         } catch (ClassCastException e) { 
    92                                 throw new StatisticalUnitException("Results were not of the correct type, they where "+resultAsArray[1].getClass()); 
    93                         } 
    94                         try { 
    95                                 if (resultAsArray==null || resultAsArray[0]==null){ 
    96                                     group.setGroupName("NA"); 
    97                                 } 
    98                                 else{ 
    99                                     group.setGroupName((String) resultAsArray[0]); 
    100                                 } 
     94        List results = getEventHandler().query(query, params); 
    10195 
    102                         } catch (ClassCastException e) { 
    103                                 throw new StatisticalUnitException("Results were not of the correct type, they where "+resultAsArray[1].getClass()); 
    104                         } 
    105                         groups.add(group); 
    106                         testCount += group.getValue(); 
    107                 } 
     96        ArrayList<Group> groups = new ArrayList<Group>(); 
     97        int testCount = 0; 
     98        for (Object result : results) { 
     99            Object[] resultAsArray = (Object[]) result; 
     100            Group group = new Group(); 
     101            try { 
     102                group.setValue((Long) resultAsArray[1]); 
     103            } catch (ClassCastException e) { 
     104                throw new StatisticalUnitException("Results were not of the correct type, they where " 
     105                        + resultAsArray[1].getClass()); 
     106            } 
     107            try { 
     108                if (resultAsArray == null || resultAsArray[0] == null) { 
     109                    group.setGroupName("NA"); 
     110                } else { 
     111                    group.setGroupName((String) resultAsArray[0]); 
     112                } 
    108113 
    109                 log.debug("Entries: {}, total in buckets:{} ", this.getEventHandler().getNumberOfEvents(), testCount); 
     114            } catch (ClassCastException e) { 
     115                throw new StatisticalUnitException("Results were not of the correct type, they where " 
     116                        + resultAsArray[1].getClass()); 
     117            } 
     118            groups.add(group); 
     119            testCount += group.getValue(); 
     120        } 
    110121 
    111                 if (groups.size() == 0) 
    112                         return false; 
     122        log.debug("Entries: {}, total in buckets:{} ", this.getEventHandler().getNumberOfEvents(), testCount); 
    113123 
    114                 // finished successfully, no exception thrown 
    115                 ObservationSeries series = new ObservationSeries(); 
    116                 series.setObservations(groups.toArray(new Group[0])); 
    117                 getObservationSeries().add(series); 
     124        if (groups.size() == 0) 
     125            return false; 
    118126 
    119                 return true; 
     127        // finished successfully, no exception thrown 
     128        ObservationSeries series = new ObservationSeries(); 
     129        series.setObservations(groups.toArray(new Group[0])); 
     130        getObservationSeries().add(series); 
    120131 
    121         } 
     132        return true; 
    122133 
    123         @Override 
    124         public void setStatisticParameters(StatisticParameters statisticParameters) { 
    125                 List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
    126                 if (methodParams.size() == 1) { 
    127                         methodParams.get(0).setParameterName("Group By Field"); 
    128                         methodParams.get(0).setParameterType(ParameterType.FIELD); 
    129                 } else { 
    130                         log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass().getSimpleName()); 
    131                 } 
    132                 this.statisticParameters = statisticParameters; 
     134    } 
    133135 
    134         } 
     136    @Override 
     137    public void setStatisticParameters(StatisticParameters statisticParameters) { 
     138        List<MethodParameter> methodParams = statisticParameters.getMethodParams(); 
     139        if (methodParams.size() == 1) { 
     140            methodParams.get(0).setParameterName("Group By Field"); 
     141            methodParams.get(0).setParameterType(ParameterType.FIELD); 
     142        } else { 
     143            log.error("Unable to set parameter type for statistic {}, incorrect number of parameters", this.getClass() 
     144                    .getSimpleName()); 
     145        } 
     146        this.statisticParameters = statisticParameters; 
     147 
     148    } 
    135149 
    136150} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/helper/StringGroupComparator.java

    r1175 r1205  
    2020package uk.ac.cardiff.raptormua.engine.statistics.helper; 
    2121 
    22 import java.text.Collator; 
    2322import java.util.Comparator; 
    2423 
     
    5049    } 
    5150 
    52     /* 
    53      * (non-Javadoc) 
    54      *  
    55      * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) 
    56      */ 
    5751    public int compare(Group arg0, Group arg1) { 
    58         Collator c = Collator.getInstance(); 
    59         return c.compare(arg0.getGroupName(), arg1.getGroupName()); 
     52        if (asc) { 
     53            return arg0.getGroupName().compareTo(arg1.getGroupName()); 
     54        } else { 
     55            return arg1.getGroupName().compareTo(arg0.getGroupName()); 
     56        } 
     57 
    6058    } 
    6159 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/CutRowsPostProcessor.java

    r1083 r1205  
    2020package uk.ac.cardiff.raptormua.engine.statistics.processor; 
    2121 
     22import java.util.List; 
     23 
    2224import org.slf4j.Logger; 
    2325import org.slf4j.LoggerFactory; 
    2426 
    25 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     27import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     28import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2629import uk.ac.cardiff.raptormua.engine.statistics.records.Bucket; 
    2730import uk.ac.cardiff.raptormua.engine.statistics.records.Group; 
     
    3235 *  
    3336 */ 
    34 public class CutRowsPostProcessor implements StatisticPostProcessor { 
     37public class CutRowsPostProcessor extends AbstractStatisticPostProcessor { 
    3538 
    3639    /** class logger */ 
     
    7578    } 
    7679 
    77     public void setNumberOfRowsToKeep(int numberOfRowsToKeep) { 
    78         this.numberOfRowsToKeep = numberOfRowsToKeep; 
     80    public void registerAndSetMethodParameters(List<MethodParameter> methodParameters) throws PostprocessorException { 
     81        if (methodParameters.size() != 1) { 
     82            log.error( 
     83                    "Post processor [{}] does not have the correct number of method parameters to work, should have 1, has {}", 
     84                    getFriendlyName(), methodParameters.size()); 
     85            throw new PostprocessorException("Not enough parameters, had " + methodParameters.size() + " expected 1"); 
     86        } else { 
     87            try { 
     88                MethodParameter parameter = methodParameters.get(0); 
     89                numberOfRowsToKeep = parameter.getValue(Integer.class); 
     90                log.debug("Set number of rows to keep as [{}]", numberOfRowsToKeep); 
     91            } catch (MethodParameterNotOfRequiredTypeException e) { 
     92                throw new PostprocessorException(e); 
     93            } 
     94        } 
     95 
    7996    } 
    80  
    81     public int getNumberOfRowsToKeep() { 
    82         return numberOfRowsToKeep; 
    83     } 
    84  
    8597} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/NumberFormatterPostProcessor.java

    r1175 r1205  
    2222import java.text.DecimalFormat; 
    2323import java.text.DecimalFormatSymbols; 
     24import java.util.List; 
    2425 
    2526import org.slf4j.Logger; 
    2627import org.slf4j.LoggerFactory; 
    2728 
    28 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     29import uk.ac.cardiff.model.wsmodel.MethodParameter; 
    2930import uk.ac.cardiff.raptormua.engine.statistics.records.Observation; 
    3031 
     
    3334 *  
    3435 */ 
    35 public class NumberFormatterPostProcessor implements StatisticPostProcessor { 
     36public class NumberFormatterPostProcessor extends AbstractStatisticPostProcessor { 
    3637    // TODO Not implemented... 
    3738    /** class logger */ 
     
    6667    } 
    6768 
     69    public void registerAndSetMethodParameters(List<MethodParameter> methodParameters) { 
     70        // no-op 
     71 
     72    } 
     73 
    6874} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/PercentagePostProcessor.java

    r1083 r1205  
    2020package uk.ac.cardiff.raptormua.engine.statistics.processor; 
    2121 
     22import java.util.List; 
     23 
    2224import org.slf4j.Logger; 
    2325import org.slf4j.LoggerFactory; 
    2426 
    25 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     27import uk.ac.cardiff.model.wsmodel.MethodParameter; 
    2628import uk.ac.cardiff.raptormua.engine.statistics.records.Observation; 
    2729 
     
    3032 *  
    3133 */ 
    32 public class PercentagePostProcessor implements StatisticPostProcessor { 
     34public class PercentagePostProcessor extends AbstractStatisticPostProcessor { 
    3335 
    34     /* class logger */ 
     36    /** class logger */ 
    3537    private final Logger log = LoggerFactory.getLogger(PercentagePostProcessor.class); 
    3638 
     
    6264    } 
    6365 
     66    /** 
     67     * No parameters, no operation here needed. 
     68     */ 
     69    public void registerAndSetMethodParameters(List<MethodParameter> methodParameters) throws PostprocessorException { 
     70 
     71    } 
     72 
    6473} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/RowSortPostProcessor.java

    r1083 r1205  
    2121 
    2222import java.util.Arrays; 
     23import java.util.List; 
    2324 
    2425import org.slf4j.Logger; 
    2526import org.slf4j.LoggerFactory; 
    2627 
    27 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     28import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     29import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2830import uk.ac.cardiff.raptormua.engine.statistics.helper.ObservationComparator; 
    2931import uk.ac.cardiff.raptormua.engine.statistics.records.Observation; 
     
    3335 *  
    3436 */ 
    35 public class RowSortPostProcessor implements StatisticPostProcessor { 
     37public class RowSortPostProcessor extends AbstractStatisticPostProcessor { 
    3638 
    3739    /** class logger */ 
     
    6870    } 
    6971 
     72    public void registerAndSetMethodParameters(List<MethodParameter> methodParameters) throws PostprocessorException { 
     73        if (methodParameters.size() != 1) { 
     74            log.error( 
     75                    "Post processor [{}] does not have the correct number of method parameters to work, should have 1, has {}", 
     76                    getFriendlyName(), methodParameters.size()); 
     77            throw new PostprocessorException("Not enough parameters, had " + methodParameters.size() + " expected 1"); 
     78        } else { 
     79            try { 
     80                MethodParameter parameter = methodParameters.get(0); 
     81                ascending = parameter.getValue(Boolean.class); 
     82                log.debug("Post processor [{}] set sort order as ascending={}", getFriendlyName(), ascending); 
     83            } catch (MethodParameterNotOfRequiredTypeException e) { 
     84                throw new PostprocessorException(e); 
     85            } 
     86        } 
     87 
     88    } 
     89 
    7090} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/SamlMetadataNameFormatter.java

    r1175 r1205  
    3636import org.slf4j.LoggerFactory; 
    3737 
    38 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     38import uk.ac.cardiff.model.wsmodel.MethodParameter; 
    3939import uk.ac.cardiff.raptormua.engine.statistics.records.Group; 
    4040import uk.ac.cardiff.raptormua.engine.statistics.records.Observation; 
     
    4444 *  
    4545 */ 
    46 public class SamlMetadataNameFormatter implements StatisticPostProcessor { 
     46public class SamlMetadataNameFormatter extends AbstractStatisticPostProcessor { 
    4747 
    4848    /** Parser manager used to parse XML. */ 
     
    5555    private final Logger log = LoggerFactory.getLogger(SamlMetadataNameFormatter.class); 
    5656 
    57     /* this is not a proper URI at the moment, just a UNC path */ 
     57    /** this is not a proper URI at the moment, just a UNC path */ 
    5858    private String SAMLMetadataURI; 
     59 
     60    /** 
     61     * Default constructor 
     62     *  
     63     */ 
     64    public SamlMetadataNameFormatter() { 
     65 
     66    } 
    5967 
    6068    public SamlMetadataNameFormatter(List<String> SAMLMetadataURIs) { 
     
    190198    } 
    191199 
     200    public void registerAndSetMethodParameters(List<MethodParameter> methodParameters) { 
     201        // TODO Auto-generated method stub 
     202 
     203    } 
     204 
    192205} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/ShibbolethMetadataNameFormatter.java

    r1167 r1205  
    2626public class ShibbolethMetadataNameFormatter extends SamlMetadataNameFormatter { 
    2727 
     28    public ShibbolethMetadataNameFormatter() { 
     29        super(); 
     30    } 
     31 
    2832    public ShibbolethMetadataNameFormatter(List<String> SAMLMetadataURIs) { 
    2933        super(SAMLMetadataURIs); 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/engine/statistics/processor/SortGroupsAlphabeticallyPostProcessor.java

    r1083 r1205  
    2121 
    2222import java.util.Arrays; 
     23import java.util.List; 
    2324 
    2425import org.slf4j.Logger; 
    2526import org.slf4j.LoggerFactory; 
    2627 
    27 import uk.ac.cardiff.raptormua.engine.statistics.StatisticPostProcessor; 
     28import uk.ac.cardiff.model.wsmodel.MethodParameter; 
     29import uk.ac.cardiff.model.wsmodel.MethodParameterNotOfRequiredTypeException; 
    2830import uk.ac.cardiff.raptormua.engine.statistics.helper.StringGroupComparator; 
    2931import uk.ac.cardiff.raptormua.engine.statistics.records.Group; 
     
    3436 *  
    3537 */ 
    36 public class SortGroupsAlphabeticallyPostProcessor implements StatisticPostProcessor { 
     38public class SortGroupsAlphabeticallyPostProcessor extends AbstractStatisticPostProcessor { 
    3739 
    3840    /** class logger */ 
     
    4143    private boolean ascending; 
    4244 
     45    /** 
     46     * Default constructor. Sets <code>ascending</code> to true. 
     47     */ 
    4348    public SortGroupsAlphabeticallyPostProcessor() { 
    4449        ascending = true; 
     
    7479    } 
    7580 
     81    public void registerAndSetMethodParameters(List<MethodParameter> methodParameters) throws PostprocessorException { 
     82        if (methodParameters.size() != 1) { 
     83            log.error( 
     84                    "Post processor [{}] does not have the correct number of method parameters to work, should have 1, has {}", 
     85                    getFriendlyName(), methodParameters.size()); 
     86            throw new PostprocessorException("Not enough parameters, had " + methodParameters.size() + " expected 1"); 
     87        } else { 
     88            try { 
     89                MethodParameter parameter = methodParameters.get(0); 
     90                ascending = parameter.getValue(Boolean.class); 
     91                log.debug("Post processor [{}] set sort order as ascending={}", getFriendlyName(), ascending); 
     92            } catch (MethodParameterNotOfRequiredTypeException e) { 
     93                throw new PostprocessorException(e); 
     94            } 
     95        } 
     96 
     97    } 
     98 
    7699} 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/server/RunServer.java

    r1179 r1205  
    2626import org.mortbay.jetty.Handler; 
    2727import org.mortbay.jetty.Server; 
     28import org.mortbay.jetty.bio.SocketConnector; 
    2829import org.mortbay.jetty.handler.DefaultHandler; 
    2930import org.mortbay.jetty.handler.HandlerCollection; 
     
    7172 
    7273        Server server = new Server(); 
    73  
    7474        SslSocketConnector sslConnector = new SslSocketConnector(); 
    7575        sslConnector.setPort(portNumber); 
     
    8181        sslConnector.setTrustPassword(trustStorePassword); 
    8282 
    83         // SocketConnector connector = new SocketConnector(); 
    84         // connector.setPort(portNumber); 
     83        SocketConnector connector = new SocketConnector(); 
     84        connector.setPort(portNumber); 
    8585 
    8686        // enable mutual authentication 
    87         sslConnector.setNeedClientAuth(true); 
    88  
     87        // sslConnector.setNeedClientAuth(true); 
     88        System.out.println("Using Connector " + sslConnector); 
    8989        server.setConnectors(new Connector[] {sslConnector}); 
    9090 
     
    102102            server.start(); 
    103103            server.join(); 
    104         } catch (Exception e) { 
     104        } catch (Throwable e) { 
    105105            e.printStackTrace(); 
    106106            System.exit(100); 
  • raptor-mua/trunk/src/main/java/uk/ac/cardiff/raptormua/wsinterface/impl/MultiUnitAggregatorImpl.java

    r1179 r1205  
    3535import uk.ac.cardiff.model.wsmodel.StatisticalUnitInformation; 
    3636import uk.ac.cardiff.raptor.remoting.server.sei.MultiUnitAggregator; 
     37import uk.ac.cardiff.raptormua.engine.Version; 
    3738import uk.ac.cardiff.raptormua.service.MUAProcess; 
    3839 
     
    5556     */ 
    5657    public String getVersion() { 
    57         return "Alpha"; 
     58        try { 
     59            return Version.getMajorVersion() + "." + Version.getMinorVersion() + "." + Version.getMicroVersion(); 
     60        } catch (Throwable e) { 
     61            return "Unknown"; 
     62        } 
    5863    } 
    5964 
Note: See TracChangeset for help on using the changeset viewer.