Changeset 1187 for MDService2


Ignore:
Timestamp:
04/01/11 20:04:33 (13 years ago)
Author:
gaba
Message:

repository param by name, Diagnostics basic version

Location:
MDService2/trunk/MDService2
Files:
3 added
10 edited

Legend:

Unmodified
Added
Removed
  • MDService2/trunk/MDService2/WebContent/Exception.jsp

    r466 r1187  
    1111<h2>MDService2: An error has occurred</h2>
    1212<hr/>
    13 <!-- <h3>Error Message</h3><span id="err_details_caller">details</span> -->
     13
    1414<s:property value="userMsg"/><br/>
    1515<s:actionerror/>
  • MDService2/trunk/MDService2/WebContent/scripts/mdservice_ui.js

    r1177 r1187  
    5353function getSelectedRepository(){
    5454        //var id = parseInt($('#repositories_select').find("option:selected").val());
    55         return $('#repositories_select').find("option:selected").val();
     55        return $('#repositories_select').find("option:selected").text();//val();
    5656
    5757}
  • MDService2/trunk/MDService2/src/eu/clarin/cmdi/mdservice/action/AdminAction.java

    r1059 r1187  
    2929        @Override
    3030        protected void  initialize(){
    31                 setRepository(0);
     31                setRepositoryByIndex(0);
    3232         }
    3333        public String getDate() {
     
    7979                                clear_params.put("type", getActionkey());       
    8080                        }
    81                         if (this.getRepository() != 0){
     81                        if (this.getRepository() != null){
    8282                                clear_params.put("repository", String.valueOf(getRepository()));       
    8383                        }       
  • MDService2/trunk/MDService2/src/eu/clarin/cmdi/mdservice/action/GenericProxyAction.java

    r1076 r1187  
    2727import com.opensymphony.xwork2.ActionSupport;
    2828
     29import eu.clarin.cmdi.mdservice.model.Diagnostics;
     30
    2931/**
    3032 * main Struts 2 controller
     
    4244       
    4345        private static JSONArray repositories = null;
     46       
     47        private Diagnostics diagnostics;
     48       
    4449        /**
    4550         * Properties to be filled by Struts with according request-parameters
     
    6065        private String actionContentType;
    6166        private String userMsg;
    62         private int repository;
     67        private String repository;
    6368        //private Map<String,Object> session;
    6469         private HttpServletRequest request;
     
    7075         }
    7176         
     77         public void setRepositoryByIndex(int id){
     78                 try {
     79                                setRepositories(GenericProxyAction.createRepositories());
     80                                // static repositories
     81                                net.sf.json.JSONArray json = getRepositories();
     82                                if (json.size() > 0){
     83                                        repository = json.getJSONObject(id).getString("name");
     84                                }
     85                        } catch (IOException e) {
     86                                // TODO Auto-generated catch block
     87                                e.printStackTrace();
     88                        } catch (InterruptedException e) {
     89                                // TODO Auto-generated catch block
     90                                e.printStackTrace();
     91                        } catch (TransformerException e) {
     92                                // TODO Auto-generated catch block
     93                                e.printStackTrace();
     94                        }
     95         }
     96         
    7297         protected void  initialize(){
    73                  repository = 1;
     98                 //repository = 1;
     99                 setRepositoryByIndex(0);                               
     100         }
     101         
     102         public Diagnostics getDiagnostics(){
     103                 return this.diagnostics;
     104         }
     105         
     106         public void setDiagnostics(Diagnostics diagnostics){
     107                 this.diagnostics = diagnostics;
     108         }
     109         public Diagnostics Diagnostics(){
     110                 if (diagnostics == null){
     111                         diagnostics  = new Diagnostics();
     112                 }
     113                 return this.diagnostics;
    74114         }
    75115        public String getQ() {
     
    167207       
    168208
    169         public void setRepository(int repository) {
     209        public void setRepository(String repository) {
    170210                this.repository = repository;
    171211        }
    172212       
    173         public int getRepository() {
     213        public String getRepository() {
    174214                //default repository = 1 (set on init)
    175                
    176215                return repository;
    177216        }
     
    278317       
    279318        public void setRepositories(JSONArray rep){
    280                 this.repositories = rep;
     319                GenericProxyAction.repositories = rep;
    281320        }
    282321       
     
    453492                net.sf.json.JSONArray json = getRepositories();
    454493                for(int i=0;i<json.size();i++){
    455                         if (json.getJSONObject(i).getInt("id") == getRepository()){
     494                        if (json.getJSONObject(i).getString("name").equals(getRepository())){
    456495                                repository_path =  json.getJSONObject(i).getString("uri");
    457496                        }
     
    507546                        hm.put("q", getQ());
    508547                }
    509                 if (getRepository() != 0){
    510                 hm.put("repository_id", String.valueOf(getRepository()));       
    511                 }
     548                //if (getRepository() != null){
     549                hm.put("repository_name", String.valueOf(getRepository()));     
     550                //}
    512551       
    513552                return hm;
  • MDService2/trunk/MDService2/src/eu/clarin/cmdi/mdservice/action/SRUProxyAction.java

    r1184 r1187  
    33import java.io.BufferedInputStream;
    44import java.io.BufferedReader;
     5import java.io.ByteArrayInputStream;
    56import java.io.File;
    67import java.io.FileInputStream;
     
    89import java.io.InputStream;
    910import java.io.InputStreamReader;
     11import java.io.StringWriter;
     12import java.io.UnsupportedEncodingException;
    1013import java.net.MalformedURLException;
    1114import java.net.URISyntaxException;
     
    1518import javax.servlet.http.HttpServletRequest;
    1619import javax.servlet.http.HttpSession;
     20import javax.xml.parsers.DocumentBuilder;
     21import javax.xml.parsers.DocumentBuilderFactory;
     22import javax.xml.parsers.ParserConfigurationException;
     23import javax.xml.transform.TransformerConfigurationException;
    1724import javax.xml.transform.TransformerException;
     25import javax.xml.transform.TransformerFactory;
     26import javax.xml.transform.TransformerFactoryConfigurationError;
     27import javax.xml.transform.dom.DOMSource;
     28import javax.xml.transform.stream.StreamResult;
    1829
    1930import net.sf.json.JSON;
     
    2637import org.apache.commons.lang.StringEscapeUtils;
    2738import org.apache.struts2.interceptor.ServletRequestAware;
     39import org.w3c.dom.Document;
     40import org.w3c.dom.Element;
     41import org.w3c.dom.Node;
     42import org.xml.sax.InputSource;
     43import org.xml.sax.SAXException;
    2844
    2945import com.opensymphony.xwork2.ActionSupport;
    3046
    31 /**
    32  * main Struts 2 controller
    33  * responds to requests (collections, model, recordset)
    34  * by dispatching the requests to appropriate internal methods and filling the inputStream with the result
    35  * 
    36  * @author vronk
    37  *
    38  */
    39 public class SRUProxyAction extends ActionSupport 
     47import eu.clarin.cmdi.mdservice.model.Diagnostic;
     48import eu.clarin.cmdi.mdservice.model.Diagnostics;
     49
     50
     51public class SRUProxyAction extends ActionSupport
     52implements ServletRequestAware
    4053{
    4154
    4255        private static final long serialVersionUID = 1L;
     56       
     57        private Diagnostics diagnostics;
    4358       
    4459        /**
    4560         * Properties to be filled by Struts with according request-parameters
    4661         */     
     62        private String q;
    4763        private String version;
    4864        private String operation;
     
    5672        private String sortKeys;
    5773        private String stylesheet;     
    58         private String extraRequestData;
     74        private String x_cmd_repository;
     75        private String x_cmd_collections;
    5976
    6077        private MDRepoProxyAction mdrepoproxyaction;
    6178        private InputStream resultStream;
     79        private HttpServletRequest request;
    6280       
    6381        private final static HashMap<String,String> hash_operations = new HashMap<String,String>();
     
    7694         }
    7795         
     96         @Override
     97                public void setServletRequest(HttpServletRequest arg0) {
     98                        request = arg0;
     99                }
     100
     101                public HttpServletRequest getServletRequest() {
     102                        return request;
     103                }
     104               
     105                public Diagnostics getDiagnostics(){
     106                        return this.diagnostics;
     107                }
     108               
     109                public void setDiagnostics(Diagnostics diagnostics){
     110                        this.diagnostics = diagnostics;
     111                }
     112       
     113               
     114         public String getQ() {
     115                        return q;
     116                }
     117
     118                public void setQ(String q) {
     119                        this.q = q;
     120                }
     121         
    78122         public InputStream getResultStream() {
    79123             return resultStream;
     
    83127         }
    84128       
     129
    85130        public String getVersion() {
    86131                return version;
     
    170215        }
    171216       
    172         public String getExtraRequestData() {
    173                 return extraRequestData;
    174         }
    175 
    176         public void setExtraRequestData(String extraRequestData) {
    177                 this.extraRequestData = extraRequestData;
    178         }
    179 
    180 
     217        public String getX_cmd_repository(){
     218                return x_cmd_repository;
     219        }
     220       
     221        public void setX_cmd_repository(String x_cmd_repository){
     222                this.x_cmd_repository = x_cmd_repository;
     223        }
     224
     225        public String getX_cmd_collections(){
     226                return x_cmd_collections;
     227        }
     228       
     229        public void setX_cmd_collections(String x_cmd_collections){
     230                this.x_cmd_collections = x_cmd_collections;
     231        }
     232
     233       
     234        public String getDiagnosticStreamName() throws TransformerConfigurationException, UnsupportedEncodingException, ParserConfigurationException, TransformerException, TransformerFactoryConfigurationError{
     235                resultStream = this.Diagnostics().buildXMLStream();
     236                return "resultStream";
     237        }
    181238        /**
    182239         * primitive identification of the target-proxy
     
    189246        }
    190247       
     248        public Diagnostics Diagnostics(){
     249                if (this.diagnostics == null){
     250                        this.diagnostics = new Diagnostics();
     251                }
     252                return this.diagnostics;
     253        }
     254       
    191255        public void prepare(){
     256                // special handling of parameter setting, x-cmd-... not alowed in java
     257                this.setX_cmd_repository(getServletRequest().getParameter("x-cmd-repository"));
     258                this.setX_cmd_collections(getServletRequest().getParameter("x-cmd-collections"));
     259
    192260                mdrepoproxyaction = new MDRepoProxyAction();
    193                 mdrepoproxyaction.setRepository(2);
    194                
     261                mdrepoproxyaction.setDiagnostics(diagnostics);
     262               
     263                //operation
     264                if (this.operation == null) {
     265                        this.Diagnostics().Add(Diagnostic.MANDATORY_NOTSUPPLIED, "operation");
     266                        //return -1;
     267                }
     268                if (!operation.equals("searchRetrieve")) {
     269                        this.Diagnostics().Add(Diagnostic.UNSUPPOERTED_OPERATION, "Only searchRetrieve supported.");
     270                        //return -1;
     271                }
    195272                mdrepoproxyaction.setActionkey(hash_operations.get(this.getOperation()));
     273                //version
     274                if (this.version == null) {
     275                        this.Diagnostics().Add(Diagnostic.MANDATORY_NOTSUPPLIED, "version");
     276                        //return -1;
     277                }
     278                if (!version.equals("1.2")) {
     279                        this.Diagnostics().Add(Diagnostic.UNSUPPORTED_VERSION, "Version 1.2 supported.");
     280                        //return -1;
     281                }
     282                //query
    196283                mdrepoproxyaction.setSquery("");
     284                if (this.query == null) {
     285                        this.Diagnostics().Add(Diagnostic.MANDATORY_NOTSUPPLIED, "query");
     286                        //return -1;
     287                }
    197288                mdrepoproxyaction.setQ(getQuery());
     289               
    198290                mdrepoproxyaction.setFormat("xml");
    199291               
    200                 if (getStartRecord() > 0 ){
     292                if ((this.startRecord < 0 ) ||(getServletRequest().getParameter("startRecord").equals("0"))) {
     293                        this.Diagnostics().Add(new Diagnostic(Diagnostic.UNSUPPORTED_PARAMETERVALUE, "startRecord must by grater than 0."));//,Diagnostic.NONFATALNONSURORGATE));
     294                        //mdrepoproxyaction.setStartItem("1");
     295                } else {
    201296                        mdrepoproxyaction.setStartItem(Integer.toString(getStartRecord()));
    202297                }
    203                 if (getMaximumRecords() > 0 ) {
    204                         mdrepoproxyaction.setMaximumItems(Integer.toString(this.getMaximumRecords()));
    205                 }
    206                
     298       
     299                if ((this.maximumRecords < 0 ) ||(getServletRequest().getParameter("maximumRecords").equals("0"))){
     300                           this.Diagnostics().Add(new Diagnostic(Diagnostic.UNSUPPORTED_PARAMETERVALUE,
     301                                           "maximumRecords must by grater than 0."));
     302                } else {
     303                        mdrepoproxyaction.setMaximumItems(Integer.toString(this.getMaximumRecords())); 
     304                }
     305               
     306                if (this.getX_cmd_repository() != null ) {
     307                        mdrepoproxyaction.setRepository(this.getX_cmd_repository());
     308                        //TODO\
     309                        if (mdrepoproxyaction.getBaseURI() == null) this.Diagnostics().Add(Diagnostic.UNSUPPORTED_PARAMETERVALUE, "Unknown repository." + getX_cmd_repository());
     310                }
     311                if (this.getX_cmd_collections() != null ) {
     312                        mdrepoproxyaction.setCollection(this.getX_cmd_collections());
     313                }
     314               
     315                //return 1;
    207316        }
    208317        public static String inputStreamAsString(InputStream stream)
     
    220329        }
    221330
    222         public void postprocess(){
     331         public static Document newDocumentFromInputStream(InputStream in) {
     332                    DocumentBuilderFactory factory = null;
     333                    DocumentBuilder builder = null;
     334                    Document ret = null;
     335
     336                    try {
     337                      factory = DocumentBuilderFactory.newInstance();
     338                      builder = factory.newDocumentBuilder();
     339                    } catch (ParserConfigurationException e) {
     340                      e.printStackTrace();
     341                    }
     342
     343                    try {
     344                      ret = builder.parse(new InputSource(in));
     345                    } catch (SAXException e) {
     346                      e.printStackTrace();
     347                    } catch (IOException e) {
     348                      e.printStackTrace();
     349                    }
     350                    return ret;
     351                  }
     352
     353
     354        public void postprocess() throws TransformerConfigurationException, UnsupportedEncodingException, ParserConfigurationException, TransformerException, TransformerFactoryConfigurationError{
    223355                //recordPacking
    224356                if (this.getRecordPacking() != null){
     
    233365                        }
    234366                }
    235         }
     367               
     368                // add diagnostics
     369                if (Diagnostics().Exists()){
     370                        Document doc = newDocumentFromInputStream(resultStream);
     371                        Node r_element=  doc.getElementsByTagName("searchRetrieveResponse").item(0);
     372                        Document ddoc = Diagnostics().buildXMLDocument();
     373                        Node d_element=  ddoc.getElementsByTagName("diagnostics").item(0);
     374                        doc.adoptNode(d_element);
     375                        r_element.appendChild(d_element);
     376                        DOMSource source = new DOMSource(doc);   
     377                        StringWriter xmlAsWriter = new StringWriter();   
     378                        StreamResult result = new StreamResult(xmlAsWriter);   
     379                        TransformerFactory.newInstance().newTransformer().transform(source, result);
     380                        resultStream = new ByteArrayInputStream(xmlAsWriter.toString().getBytes("UTF-8"));
     381                }
     382        }
     383       
    236384        /**
    237385         * default Action method
    238386         */
    239387        public String execute() throws Exception {
    240 
    241388                prepare();
    242                 if (this.mdrepoproxyaction.execute() == SUCCESS){
    243                         resultStream = this.mdrepoproxyaction.getResultStream();
    244                         postprocess();
    245                         return SUCCESS;
     389                if (Diagnostics().Accepted()){
     390                        //TODO diagnostic
     391                        if (this.mdrepoproxyaction.getTargetRequest() == null) {
     392                                Diagnostics().Add(Diagnostic.QUERYSYNTAXERROR);
     393                                return ERROR;
     394                        }
     395                        if (this.mdrepoproxyaction.execute() == SUCCESS){
     396                                resultStream = this.mdrepoproxyaction.getResultStream();
     397                                postprocess();
     398                                return SUCCESS;
     399                        }
    246400                }
    247401                return ERROR;
  • MDService2/trunk/MDService2/src/struts.xml

    r1183 r1187  
    1313               
    1414                <global-results>
    15                             <result name="exception">/Exception.jsp</result>
     15                            <!-- <result name="exception">/Exception.jsp</result>-->
     16                            <result name="exception">/ExceptionXML.jsp</result>
    1617                            <!-- tried setting html-status, didn't work: 
    1718                                <result name="exception">
     
    2021                            </result> -->
    2122                            <result name="error">/Error.jsp</result>
     23                            <!-- <result name="error" type="redirectAction"></result>
     24                             -->
    2225                </global-results>
    2326
     
    228231                <action name="sru/*" class="eu.clarin.cmdi.mdservice.action.SRUProxyAction" method="execute">
    229232                           <param name="q">{1}</param>
    230                            <result type="stream">                             
     233                           <result name="success" type="stream">                               
    231234                                <param name="contentType">text/xml</param>
    232235                                <param name="inputName">resultStream</param>                           
     236                            </result>
     237                            <result name="error" type="stream">                       
     238                                <param name="contentType">text/xml</param>
     239                                <param name="inputName">${getDiagnosticStreamName()}</param>                           
    233240                            </result>
    234241                </action>
  • MDService2/trunk/MDService2/src/xsl/cmd_functions.xsl

    r1155 r1187  
    186186                <xsl:choose>
    187187                        <xsl:when test="$action=''">
    188                                 <xsl:value-of select="concat($base_dir, '/?q=', $q, '&amp;repository=', $repository_id)" />
     188                                <xsl:value-of select="concat($base_dir, '/?q=', $q, '&amp;repository=', $repository_name)" />
    189189                        </xsl:when>                     
    190190                        <xsl:otherwise>
    191                                 <xsl:value-of select="concat($base_dir, '/',$action, '/', $format, '/?q=', $q, '&amp;repository=', $repository_id)" />
     191                                <xsl:value-of select="concat($base_dir, '/',$action, '/', $format, '/?q=', $q, '&amp;repository=', $repository_name)" />
    192192                        </xsl:otherwise>
    193193                </xsl:choose>
  • MDService2/trunk/MDService2/src/xsl/mdset2view.xsl

    r1179 r1187  
    260260                        <xsl:choose>
    261261                                <xsl:when test="exists(.//MdSelfLink)" >
    262                                 <a class="internal" href="{concat('record/htmldetail/', my:encodePID(.//MdSelfLink), '?repository=', $repository_id)}" >
     262                                <a class="internal" href="{concat('record/htmldetail/', my:encodePID(.//MdSelfLink), '?repository=', $repository_name)}" >
    263263                                                <xsl:value-of select="$absolute_position" />
    264264                                </a>
  • MDService2/trunk/MDService2/src/xsl/model2matrix.xsl

    r1081 r1187  
    4242        </xsl:when>     
    4343        <xsl:when test="$termset_name='Components'" >
    44                 <xsl:message>model2matrix.Components.repo_id: <xsl:value-of select="$repository_id" /></xsl:message>
     44                <xsl:message>model2matrix.Components.repo_name: <xsl:value-of select="$repository_name" /></xsl:message>
    4545                <!--  get the whole Termset for every root-node (teiHeader, TCP, ...) -->
    4646                <Termsets>
     
    6262                                        <!--  else get the full summary for given termset -->
    6363                                        <xsl:otherwise>
    64                                         <xsl:variable name="resolved_termset_uri" select="concat($model_matrix_uri,$termset_name,'&amp;maxdepth=8&amp;repository=',$repository_id)" />
     64                                        <xsl:variable name="resolved_termset_uri" select="concat($model_matrix_uri,$termset_name,'&amp;maxdepth=8&amp;repository=',$repository_name)" />
    6565                                                <xsl:message>processing model-term($resolved_termset_uri): <xsl:value-of select="$resolved_termset_uri" /> </xsl:message>                       
    6666                                                <xsl:copy-of select="document($resolved_termset_uri)" />
     
    134134<xsl:template name="full-matrix" >
    135135<!--  collect all model termMatrix -->
    136                 <xsl:variable name="model_termsets_uri" select="concat($model_matrix_uri,'Components', '&amp;maxdepth=1&amp;repository=',$repository_id)" />
     136                <xsl:variable name="model_termsets_uri" select="concat($model_matrix_uri,'Components', '&amp;maxdepth=1&amp;repository=',$repository_name)" />
    137137        <xsl:message>full-matrix.model_termsets_uri: <xsl:value-of select="$model_termsets_uri"/>  </xsl:message>                               
    138138                <xsl:variable name="model_termsets" select="document($model_termsets_uri)" />
  • MDService2/trunk/MDService2/src/xsl/params.xsl

    r1081 r1187  
    2424       
    2525                       
    26         <xsl:param name="repository_id" select="''" />
     26        <xsl:param name="repository_name" select="''" />
    2727       
    2828        <!--  for resolving components by suffixing with @ComponentId -->
Note: See TracChangeset for help on using the changeset viewer.